Как написать вложенные условия, когда в слюни - PullRequest
0 голосов
/ 10 сентября 2018

Вот мой документ JSON

    {
   "location": {
      "details": [
         {
            "country": "India",
            "state": "haryana"
         },
         {
            "country": "America",
            "state": "LA"
         },
         {
            "country": "India",
            "state": "Maharashtra"
         }
      ]
   },
   "organisation": {
      "details": [
         {
            "name": "AON",
            "country": "india"
         },
         {
            "name": "AON",
            "country": "America"
         }
      ]
   }
}

Я должен применить правило в формате ниже

 If(

        (location.details.country=='India' OR 
        location.details.state=='haryana') 
AND 

        organisation.details.name=='AON'
    )

До сих пор я исследовал и знал, что правила на полях тот же класс может быть применен во вложенном формате, как показано ниже .по этой ссылке: Как записать вложенные условия, когда в drools

// Use this instead
Person( ( age > 50 && weight > 80 ) || height > 2 )

Но я хочу применить правила различных классов pojo в том же вложенном состоянии, как показано ниже

    If(

                (location.details.country=='India' OR 
                location.details.state=='haryana') 
        AND 

                organisation.details.name=='AON'
      AND 
               (location.details.country=='India' AND
                organisation.details.country=='India')
            )
//any level of nested between different pojo classes can be present

Возможно ли это сделать в слюнях?

Я написал следующее правило

rule "rule1"
salience 1
when


        $rootDoc:RootDoc($locationList:location && $organisationList:organisation) 

     and
        (
            $orgList:Organisation($orgdetailsList:details) from $organisationList
            NamesList1:Details(name=='AON') from $orgdetailsList
            or
            $locList:Location($locdetailsList:details) from $locationList
            NamesList2:Details_(state=='haryana') from $locdetailsList

        )

then
    System.out.println("Pojo Welocome-------");



end

Но оно показывает мне эту ошибку: Строка 18: 3 несоответствующих ввода 'NamesList1' в правиле "rule1"

В основном, когда я пишу два условия в одной скобке, это показывает ошибку.

Ниже приведены классы pojo

-----------------------------------pojo_Classes2.Detail.java-----------------------------------

package pojo_Classes2;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"name",
"country"
})
public class Detail {

@JsonProperty("name")
private String name;
@JsonProperty("country")
private String country;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("name")
public String getName() {
return name;
}

@JsonProperty("name")
public void setName(String name) {
this.name = name;
}

@JsonProperty("country")
public String getCountry() {
return country;
}

@JsonProperty("country")
public void setCountry(String country) {
this.country = country;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------pojo_Classes2.Detail_.java-----------------------------------

package pojo_Classes2;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"country",
"state"
})
public class Detail_ {

@JsonProperty("country")
private String country;
@JsonProperty("state")
private String state;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("country")
public String getCountry() {
return country;
}

@JsonProperty("country")
public void setCountry(String country) {
this.country = country;
}

@JsonProperty("state")
public String getState() {
return state;
}

@JsonProperty("state")
public void setState(String state) {
this.state = state;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------pojo_Classes2.Location.java-----------------------------------

package pojo_Classes2;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"details"
})
public class Location {

@JsonProperty("details")
private List<Detail_> details = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("details")
public List<Detail_> getDetails() {
return details;
}

@JsonProperty("details")
public void setDetails(List<Detail_> details) {
this.details = details;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------pojo_Classes2.Organisation.java-----------------------------------

package pojo_Classes2;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"details"
})
public class Organisation {

@JsonProperty("details")
private List<Detail> details = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("details")
public List<Detail> getDetails() {
return details;
}

@JsonProperty("details")
public void setDetails(List<Detail> details) {
this.details = details;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------pojo_Classes2.RootDoc.java-----------------------------------

package pojo_Classes2;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"organisation",
"location"
})
public class RootDoc {

@JsonProperty("organisation")
private Organisation organisation;
@JsonProperty("location")
private Location location;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("organisation")
public Organisation getOrganisation() {
return organisation;
}

@JsonProperty("organisation")
public void setOrganisation(Organisation organisation) {
this.organisation = organisation;
}

@JsonProperty("location")
public Location getLocation() {
return location;
}

@JsonProperty("location")
public void setLocation(Location location) {
this.location = location;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}

Я думаю, что нашел проблему.

Это правильно?

Это происходит потому, что вы не можете связать переменную и использовать ее в RHS, если условиеИЛИ между ними .???

...