/*
* Copyright 2011 JBoss Inc
*
* Licensed 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.drools.chance.common.fact;
import org.drools.chance.common.ChanceStrategyFactory;
import org.drools.chance.common.ImperfectField;
import org.drools.chance.common.ImperfectFieldImpl;
import org.drools.chance.common.trait.ImpBean;
import org.drools.chance.degree.Degree;
import org.drools.chance.degree.DegreeType;
import org.drools.chance.distribution.Distribution;
import org.drools.chance.distribution.ImpKind;
import org.drools.chance.distribution.ImpType;
import org.drools.chance.distribution.fuzzy.linguistic.LinguisticImperfectField;
import org.drools.chance.distribution.fuzzy.linguistic.ShapedFuzzyPartitionStrategyFactory;
import org.drools.chance.distribution.probability.BasicDistributionStrategyFactory;
import org.drools.chance.distribution.probability.dirichlet.DirichletDistributionStrategyFactory;
import org.drools.chance.distribution.probability.discrete.DiscreteDistributionStrategyFactory;
/**
* Desired target for the generated Handle class, given the class Bean
* and assuming its two fields "field" and "age" have been tagged as @Imperfect
*/
public class BeanImp implements ImpBean {
// an "history field" for every @Imperfect field in the managed bean
private ImperfectField<String> name_$$Imp = new ImperfectFieldImpl<String>(
ChanceStrategyFactory.<String>buildStrategies(
ImpKind.PROBABILITY,
ImpType.DISCRETE,
DegreeType.SIMPLE,
String.class)
);
private ImperfectField<Boolean> flag_$$Imp = new ImperfectFieldImpl<Boolean>(
ChanceStrategyFactory.<Boolean>buildStrategies(
ImpKind.PROBABILITY,
ImpType.DISCRETE,
DegreeType.SIMPLE,
Boolean.class),
"true/0.66, false/0.34"
);
// an "history field" for every @Imperfect field in the managed bean
// private ImperfectField<Integer> age;
private ImperfectField<Integer> age_$$Imp = new ImperfectFieldImpl<Integer>(
ChanceStrategyFactory.<Integer>buildStrategies(
ImpKind.PROBABILITY,
ImpType.DIRICHLET,
DegreeType.SIMPLE,
Integer.class),
"18/0.02, 19/0.01, 20/0.04"
);
// private ImperfectField<Weight> body;
private ImperfectField<Weight> body_$$Imp = new LinguisticImperfectField<Weight,Double>(
ChanceStrategyFactory.<Weight>buildStrategies(
ImpKind.FUZZINESS,
ImpType.LINGUISTIC,
DegreeType.SIMPLE,
Weight.class),
ChanceStrategyFactory.<Double>buildStrategies(
ImpKind.POSSIBILITY,
ImpType.LINGUISTIC,
DegreeType.SIMPLE,
Double.class),
null
);
private ImperfectField<Cheese> likes_$$Imp = new ImperfectFieldImpl<Cheese>(
ChanceStrategyFactory.<Cheese>buildStrategies(
ImpKind.PROBABILITY,
ImpType.BASIC,
DegreeType.SIMPLE,
Cheese.class),
"cheddar/0.6"
);
// private ImperfectField<Weight> body;
private ImperfectField<Price> price_$$Imp = new LinguisticImperfectField<Price,Integer>(
ChanceStrategyFactory.<Price>buildStrategies(
ImpKind.FUZZINESS,
ImpType.LINGUISTIC,
DegreeType.SIMPLE,
Price.class),
ChanceStrategyFactory.<Integer>buildStrategies(
ImpKind.POSSIBILITY,
ImpType.LINGUISTIC,
DegreeType.SIMPLE,
Integer.class),
null
);
private String name;
private Boolean flag;
private Integer age;
private Weight body;
private Double weight;
private Cheese likes;
private Integer bucks;
private Price price;
// Inherited constructors
public BeanImp() {
age_$$Imp.setValue( new DirichletDistributionStrategyFactory<Integer>().buildStrategies( DegreeType.SIMPLE, Integer.class).parse( "18/0.02, 19/0.01, 20/0.04" ),
false );
name_$$Imp.setValue( new DiscreteDistributionStrategyFactory<String>().buildStrategies( DegreeType.SIMPLE, String.class).parse( "john/0.3, philip/0.7" ),
false );
body_$$Imp.setValue( new ShapedFuzzyPartitionStrategyFactory<Weight>().buildStrategies( DegreeType.SIMPLE, Weight.class).parse( "SLIM/0.5, FAT/0.5" ),
false );
likes_$$Imp.setValue( new BasicDistributionStrategyFactory<Cheese>().buildStrategies( DegreeType.SIMPLE, Cheese.class).parse( "cheddar/0.6" ),
false );
body_$$Imp.setValue( new ShapedFuzzyPartitionStrategyFactory<Weight>().buildStrategies( DegreeType.SIMPLE, Weight.class ).parse("SLIM/0.6, FAT/0.4"), false );
weight = 65.0;
synchFields();
}
private void synchFields() {
if (name != null)
name_$$Imp.setValue(name);
if (name_$$Imp != null)
name = name_$$Imp.getCrisp();
if (age != null)
age_$$Imp.setValue(age);
if (age_$$Imp != null)
age = age_$$Imp.getCrisp();
if (flag != null)
flag_$$Imp.setValue(flag);
if (flag_$$Imp != null)
flag = flag_$$Imp.getCrisp();
if ( weight != null ) {
Distribution dist = ((LinguisticImperfectField<Weight, Double>) body_$$Imp).fuzzify(weight);
body_$$Imp.setValue(dist, false);
body = body_$$Imp.getCrisp();
} else {
if ( body != null )
body_$$Imp.setValue( body );
if ( body_$$Imp != null ) {
body = body_$$Imp.getCrisp();
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
}
if ( bucks != null ) {
Distribution dist = ((LinguisticImperfectField<Price, Integer>) price_$$Imp).fuzzify( bucks );
price_$$Imp.setValue(dist, false);
price = price_$$Imp.getCrisp();
} else {
if ( price != null )
price_$$Imp.setValue( price );
if ( price_$$Imp != null ) {
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price, Integer>) price_$$Imp).defuzzify().intValue();
}
}
if (likes != null)
likes_$$Imp.setValue(likes);
if (likes_$$Imp != null)
likes = likes_$$Imp.getCrisp();
}
public ImperfectField<String> getName() {
return name_$$Imp;
}
public Distribution<String> getNameDistr() {
return name_$$Imp.getCurrent();
}
public String getNameValue() {
return name;
}
public void setName(ImperfectField<String> x) {
name_$$Imp = x;
name = name_$$Imp.getCrisp();
}
public void updateName(ImperfectField<String> x) {
name_$$Imp.update( x.getCurrent() );
name = name_$$Imp.getCrisp();
}
public void setNameValue(String val) {
name_$$Imp.setValue(val,false);
name = name_$$Imp.getCrisp();
}
public void updateNameValue(String val) {
name_$$Imp.setValue(val,true);
name = name_$$Imp.getCrisp();
}
public void setNameDistr(Distribution<String> field_dist) {
name_$$Imp.setValue(field_dist,false);
name = (name_$$Imp.getCrisp()); }
public void updateNameDistr(Distribution<String> field_bit) {
name_$$Imp.update(field_bit);
name = name_$$Imp.getCrisp();
}
public ImperfectField<Boolean> getFlag() {
return flag_$$Imp;
}
public Distribution<Boolean> getFlagDistr() {
return flag_$$Imp.getCurrent();
}
public Boolean getFlagValue() {
return flag;
}
public void setFlag(ImperfectField<Boolean> x) {
flag_$$Imp = x;
flag = flag_$$Imp.getCrisp();
}
public void setFlagDistr(Distribution<Boolean> x) {
flag_$$Imp.setValue( x, false );
flag = flag_$$Imp.getCrisp();
}
public void setFlagValue(Boolean x) {
flag_$$Imp.setValue( x, false );
flag = flag_$$Imp.getCrisp();
}
public void updateFlag(ImperfectField<Boolean> x) {
flag_$$Imp.update( x.getCurrent() );
flag = flag_$$Imp.getCrisp();
}
public void updateFlagDistr(Distribution<Boolean> x) {
flag_$$Imp.update( x );
flag = flag_$$Imp.getCrisp();
}
public void updateFlagValue(Boolean x) {
flag_$$Imp.update( x );
flag = flag_$$Imp.getCrisp();
}
// Extended getters and setters for field : age
public ImperfectField<Integer> getAge() {
return age_$$Imp;
}
public Distribution<Integer> getAgeDistr() {
return age_$$Imp.getCurrent();
}
public Integer getAgeValue() {
return age;
}
public void setAge(ImperfectField<Integer> x) {
age_$$Imp = x;
age = age_$$Imp.getCrisp();
}
public void updateAge(ImperfectField<Integer> x) {
age_$$Imp.update( x.getCurrent() );
age = age_$$Imp.getCrisp();
}
public void setAgeValue(Integer val) {
age_$$Imp.setValue(val,false);
age = age_$$Imp.getCrisp();
}
public void updateAgeValue(Integer val) {
age_$$Imp.setValue(val,true);
age = age_$$Imp.getCrisp();
}
public void setAgeDistr(Distribution<Integer> field_dist) {
age_$$Imp.setValue(field_dist,false);
age = (age_$$Imp.getCrisp()); }
public void updateAgeDistr(Distribution<Integer> field_bit) {
age_$$Imp.update(field_bit);
age = age_$$Imp.getCrisp();
}
public Integer getBucks() {
return bucks;
}
public void setBucks(Integer w) {
Distribution dist = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).fuzzify(w);
price_$$Imp.setValue(dist,false);
price = price_$$Imp.getCrisp();
bucks = w;
}
public ImperfectField<Price> getPrice() {
return price_$$Imp;
}
public Distribution<Price> getPriceDistr() {
return price_$$Imp.getCurrent();
}
public Price getPriceValue() {
return price;
}
public void setPrice(ImperfectField<Price> x) {
price_$$Imp.setValue( x.getCurrent(), false );
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void setPriceDistr(Distribution<Price> x) {
price_$$Imp.setValue( x, false );
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void setPriceValue(Price val) {
price = val;
this.price_$$Imp.setValue( val, false);
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void updatePrice(ImperfectField<Price> price_bit) {
price_$$Imp.update( price_bit.getCurrent() );
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void updatePriceValue(Price val) {
price = val;
price_$$Imp.setValue(val,true);
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void updatePriceDistr(Distribution<Price> price_bit) {
price_$$Imp.update(price_bit);
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public void updatePriceValue( Price val, Degree deg, String... args ) {
price_$$Imp.update( val, deg, args );
price = price_$$Imp.getCrisp();
bucks = ((LinguisticImperfectField<Price,Integer>) price_$$Imp).defuzzify().intValue();
}
public ImperfectField<Cheese> getLikes() {
return likes_$$Imp;
}
public Distribution<Cheese> getLikesDistr() {
return likes_$$Imp.getCurrent();
}
public Cheese getLikesValue() {
return likes;
}
public void setLikes(ImperfectField<Cheese> x) {
likes_$$Imp = x;
likes = likes_$$Imp.getCrisp();
}
public void updateLikes(ImperfectField<Cheese> x) {
likes_$$Imp.update( x.getCurrent() );
likes = likes_$$Imp.getCrisp();
}
public void setLikesValue(Cheese val) {
likes_$$Imp.setValue(val,false);
likes = likes_$$Imp.getCrisp();
}
public void updateLikesValue(Cheese val) {
likes_$$Imp.setValue(val,true);
likes = likes_$$Imp.getCrisp();
}
public void setLikesDistr(Distribution<Cheese> field_dist) {
likes_$$Imp.setValue(field_dist,false);
likes = (likes_$$Imp.getCrisp()); }
public void updateLikesDistr(Distribution<Cheese> field_bit) {
likes_$$Imp.update(field_bit);
likes = likes_$$Imp.getCrisp();
}
// Extended getters and setters for fuzzy field : body
public Double getWeight() {
return weight;
}
public void setWeight(Double w) {
Distribution dist = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).fuzzify(w);
body_$$Imp.setValue(dist,false);
body = body_$$Imp.getCrisp();
weight = w;
}
public ImperfectField<Weight> getBody() {
return body_$$Imp;
}
public Distribution<Weight> getBodyDistr() {
return body_$$Imp.getCurrent();
}
public Weight getBodyValue() {
return body;
}
public void setBody(ImperfectField<Weight> x) {
body_$$Imp.setValue( x.getCurrent(), false );
body = body_$$Imp.getCrisp();
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
public void setBodyDistr(Distribution<Weight> x) {
body_$$Imp.setValue( x, false );
body = body_$$Imp.getCrisp();
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
public void setBodyValue(Weight val) {
body = val;
this.body_$$Imp.setValue( val, false);
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
public void updateBody(ImperfectField<Weight> body_bit) {
body_$$Imp.update( body_bit.getCurrent() );
body = body_$$Imp.getCrisp();
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
public void updateBodyValue(Weight val) {
body = val;
body_$$Imp.setValue(val,true);
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
public void updateBodyDistr(Distribution<Weight> body_bit) {
body_$$Imp.update(body_bit);
body = body_$$Imp.getCrisp();
weight = ((LinguisticImperfectField<Weight,Double>) body_$$Imp).defuzzify().doubleValue();
}
@Override
public String toString() {
return "BeanImp - HC {" +
"name_$$Imp=" + name_$$Imp +
", age_$$Imp=" + age_$$Imp +
", body_$$Imp=" + body_$$Imp +
", name='" + name + '\'' +
", age=" + age +
", body=" + body +
", weight=" + weight +
'}';
}
}