/*
* 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.trait;
import org.drools.chance.common.ImperfectField;
import org.drools.chance.common.fact.Price;
import org.drools.chance.common.fact.Weight;
import org.drools.chance.distribution.Distribution;
import org.drools.chance.distribution.fuzzy.linguistic.LinguisticImperfectField;
import org.drools.core.util.Triple;
import org.drools.core.util.TripleFactory;
import org.drools.core.util.TripleFactoryImpl;
import org.drools.core.util.TripleStore;
import org.drools.factmodel.traits.TraitProxy;
import org.drools.factmodel.traits.TraitableBean;
import org.drools.factmodel.traits.TripleBasedBean;
import org.drools.factmodel.traits.TripleBasedTypes;
public class ImpBeanLegacyProxy extends TraitProxy implements ImpBean {
private LegacyBean object;
private TripleStore store;
public ImpBeanLegacyProxy( LegacyBean x, TripleStore y, TripleFactory tf ) {
object = x;
store = y;
setTripleFactory( tf );
setFields( new ImpBeanLegacyWrapper( x, y, tf ) );
x._setDynamicProperties( new TripleBasedBean( x, y, tf ) );
x._setTraitMap( new TripleBasedTypes( x, y, tf ) );
synchFields();
}
@Override
public String getTraitName() {
return ImpBean.class.getName();
}
public TraitableBean getObject() {
return object;
}
public LegacyBean getCore() {
return object;
}
private void synchFields() {
String coreName = getNameCore();
ImperfectField<String> name = getName();
if ( coreName != null ) {
name.setValue( coreName, false );
}
setNameCore( name.getCrisp() );
Boolean coreFlag = getFlagCore();
ImperfectField<Boolean> flag = getFlag();
if ( coreFlag != null ) {
flag.setValue( coreFlag, false );
}
setFlagCore( flag.getCrisp() );
Integer coreAge = getAgeCore();
ImperfectField<Integer> age = getAge();
if ( coreAge != null ) {
age.setValue( coreAge, false );
}
setAgeCore( age.getCrisp() );
Cheese coreLikes = getLikesCore();
ImperfectField<Cheese> likes = getLikes();
if ( coreLikes != null ) {
likes.setValue( coreLikes, false );
}
setLikesCore( likes.getCrisp() );
LinguisticImperfectField<Weight,Double> bodyImp = (LinguisticImperfectField<Weight,Double>) getBody();
Double wgt = getWeight();
if ( wgt != null ) {
Distribution dist = bodyImp.fuzzify(wgt);
bodyImp.setValue(dist, false);
setBodyCore( bodyImp.getCrisp() );
} else {
Weight bodyVal = getBodyValue();
if ( bodyVal != null )
bodyImp.setValue( bodyVal );
if ( bodyImp != null ) {
setBodyCore( bodyImp.getCrisp() );
setWeightCore( ( bodyImp ).defuzzify().doubleValue() );
}
}
LinguisticImperfectField<Price,Integer> priceImp = (LinguisticImperfectField<Price,Integer>) getPrice();
Integer pri = getBucks();
if ( pri != null ) {
Distribution dist = priceImp.fuzzify(pri);
priceImp.setValue(dist, false);
setPriceCore( priceImp.getCrisp() );
} else {
Price priceVal = getPriceValue();
if ( priceVal != null )
priceImp.setValue( priceVal );
if ( priceImp != null ) {
setPriceCore( priceImp.getCrisp() );
setBucksCore( ( priceImp.defuzzify() ).intValue() );
}
}
}
public ImperfectField<String> getName() {
return (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
}
public Distribution<String> getNameDistr() {
return ((ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue()).getCurrent();
}
public String getNameValue() {
return getCore().getName();
}
public String getNameCore() {
return getCore().getName();
}
public void setName(ImperfectField<String> x) {
store.put( property( "name_$$Imp", x ) );
getCore().setName( x.getCrisp() );
}
public void setNameDistr(Distribution<String> x) {
ImperfectField<String> fld = (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
fld.setValue( x, false );
getCore().setName( fld.getCrisp() );
}
public void setNameValue(String x) {
ImperfectField<String> fld = (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
fld.setValue( x, false );
getCore().setName( fld.getCrisp() );
}
public void setNameCore( String x ) {
getCore().setName(x);
}
public void updateName(ImperfectField<String> x) {
ImperfectField<String> fld = (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
getCore().setName( fld.getCrisp() );
}
public void updateNameDistr(Distribution<String> x) {
ImperfectField<String> fld = (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
fld.update( x );
getCore().setName( fld.getCrisp() );
}
public void updateNameValue(String x) {
ImperfectField<String> fld = (ImperfectField<String>) store.get( propertyKey( "name_$$Imp" ) ).getValue();
fld.update( x );
getCore().setName( fld.getCrisp() );
}
public ImperfectField<Boolean> getFlag() {
return (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
}
public Distribution<Boolean> getFlagDistr() {
return ((ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue()).getCurrent();
}
public Boolean getFlagValue() {
Triple t = store.get( propertyKey( "flag") );
if ( t == null ) {
return null;
} else {
return (Boolean) t.getValue();
}
}
protected Boolean getFlagCore() {
return (Boolean) store.get( propertyKey( "flag") ).getValue();
}
public void setFlag(ImperfectField<Boolean> x) {
store.put( property( "flag_$$Imp", x ) );
store.put( property( "flag", x.getCrisp() ) );
}
public void setFlagDistr(Distribution<Boolean> x) {
ImperfectField<Boolean> fld = (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "flag", fld.getCrisp() ) );
}
public void setFlagValue(Boolean x) {
ImperfectField<Boolean> fld = (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "flag", fld.getCrisp() ) );
}
public void setFlagCore( Boolean x ) {
store.put( property( "flag", x ) );
}
public void updateFlag(ImperfectField<Boolean> x) {
ImperfectField<Boolean> fld = (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
store.put( property( "flag", fld.getCrisp() ) );
}
public void updateFlagDistr(Distribution<Boolean> x) {
ImperfectField<Boolean> fld = (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "flag", fld.getCrisp() ) );
}
public void updateFlagValue(Boolean x) {
ImperfectField<Boolean> fld = (ImperfectField<Boolean>) store.get( propertyKey( "flag_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "flag", fld.getCrisp() ) );
}
public ImperfectField<Integer> getAge() {
return (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();
}
public Distribution<Integer> getAgeDistr() {
return ((ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue()).getCurrent();
}
public Integer getAgeValue() {
Triple t = store.get( propertyKey( "age") );
if ( t == null ) {
return null;
} else {
return (Integer) t.getValue();
}
}
protected Integer getAgeCore() {
return (Integer) store.get( propertyKey( "age") ).getValue();
}
public void setAge(ImperfectField<Integer> x) {
store.put( property( "age_$$Imp", x ) );
store.put( property( "age", x.getCrisp() ) );
}
public void setAgeDistr(Distribution<Integer> x) {
ImperfectField<Integer> fld = (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();;
fld.setValue( x, false );
store.put( property( "age", fld.getCrisp() ) );
}
public void setAgeValue(Integer x) {
ImperfectField<Integer> fld = (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "age", x ) );
}
public void setAgeCore( Integer x ) {
store.put( property( "age", x ) );
}
public void updateAgeDistr(Distribution<Integer> x) {
ImperfectField<Integer> fld = (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "age", fld.getCrisp() ) );
}
public void updateAgeValue(Integer x) {
ImperfectField<Integer> fld = (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "age", fld.getCrisp() ) );
}
public void updateAge(ImperfectField<Integer> x) {
ImperfectField<Integer> fld = (ImperfectField<Integer>) store.get( propertyKey( "age_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
store.put( property( "age", fld.getCrisp() ) );
}
public ImperfectField<Weight> getBody() {
return (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
}
public Distribution<Weight> getBodyDistr() {
return ((ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue()).getCurrent();
}
public Weight getBodyValue() {
Triple t = store.get( propertyKey( "body" ) );
if ( t == null ) {
return null;
} else {
return (Weight) t.getValue();
}
}
protected Weight getBodyCore() {
return (Weight) store.get( propertyKey( "body") ).getValue();
}
public void setBody(ImperfectField<Weight> x) {
store.put( property( "body_$$Imp", x ) );
store.put( property( "body", x.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue());
}
public void setBodyDistr(Distribution<Weight> x) {
ImperfectField<Weight> fld = (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "body", fld.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue() );
}
public void setBodyValue(Weight x) {
ImperfectField<Weight> fld = (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "body", fld.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue());
}
public void setBodyCore( Weight x ) {
store.put( property( "body", x ) );
}
public void updateBodyDistr(Distribution<Weight> x) {
ImperfectField<Weight> fld = (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "body", fld.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue() );
}
public void updateBodyValue(Weight x) {
ImperfectField<Weight> fld = (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "body", fld.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue() );
}
public void updateBody(ImperfectField<Weight> x) {
ImperfectField<Weight> fld = (ImperfectField<Weight>) store.get( propertyKey( "body_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
store.put( property( "body", fld.getCrisp() ) );
setWeightCore( ((LinguisticImperfectField<Weight,Double>) getBody()).defuzzify().doubleValue() );
}
public Double getWeightCore() {
return getCore().getWeight();
}
public void setWeightCore( Double x ) {
getCore().setWeight( x );
}
public Double getWeight() {
System.out.println( getCore() );
return getWeightCore();
}
public void setWeight(Double w) {
LinguisticImperfectField<Weight,Double> bodyImp = (LinguisticImperfectField<Weight, Double>) getBody();
bodyImp.setValue( bodyImp.fuzzify(w), false );
setBodyCore( bodyImp.getCrisp() );
setWeightCore( w );
}
public ImperfectField<Price> getPrice() {
return (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
}
public Distribution<Price> getPriceDistr() {
return ((ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue()).getCurrent();
}
public Price getPriceValue() {
Triple t = store.get( propertyKey( "price" ) );
if ( t == null ) {
return null;
} else {
return (Price) t.getValue();
}
}
protected Price getPriceCore() {
return (Price) store.get( propertyKey( "price" ) ).getValue();
}
public void setPrice(ImperfectField<Price> x) {
store.put( property( "price_$$Imp", x ) );
store.put( property( "price", x.getCrisp() ) );
setBucksCore(((LinguisticImperfectField<Price, Integer>) getPrice()).defuzzify().intValue() );
}
public void setPriceDistr(Distribution<Price> x) {
ImperfectField<Price> fld = (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "price", fld.getCrisp() ) );
setBucksCore(((LinguisticImperfectField<Price, Integer>) getPrice()).defuzzify().intValue() );
}
public void setPriceValue(Price x) {
ImperfectField<Price> fld = (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "price", fld.getCrisp() ) );
setBucksCore( ( (LinguisticImperfectField<Price,Integer>) getPrice()).defuzzify().intValue() );
}
public void setPriceCore( Price x ) {
store.put( property( "price", x ) );
}
public void updatePrice(ImperfectField<Price> x) {
ImperfectField<Price> fld = (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
store.put( property( "price", fld.getCrisp() ) );
setBucksCore( ( (LinguisticImperfectField<Price,Integer>) getPrice()).defuzzify().intValue() );
}
public void updatePriceDistr(Distribution<Price> x) {
ImperfectField<Price> fld = (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "price", fld.getCrisp() ) );
setBucksCore( ( (LinguisticImperfectField<Price,Integer>) getPrice()).defuzzify().intValue() );
}
public void updatePriceValue(Price x) {
ImperfectField<Price> fld = (ImperfectField<Price>) store.get( propertyKey( "price_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "price", fld.getCrisp() ) );
setBucksCore( ( (LinguisticImperfectField<Price,Integer>) getPrice()).defuzzify().intValue() );
}
public Integer getBucksCore() {
return (Integer) (store.get( propertyKey( "bucks" ) ) ).getValue();
}
public void setBucksCore( Integer x ) {
store.put( property( "bucks", x ) );
}
public Integer getBucks() {
return getBucksCore();
}
public void setBucks(Integer x) {
LinguisticImperfectField<Price,Integer> priceImp = (LinguisticImperfectField<Price, Integer>) getPrice();
priceImp.setValue( priceImp.fuzzify( x ), false );
setPriceCore( priceImp.getCrisp() );
setBucksCore( x );
}
public ImperfectField<Cheese> getLikes() {
return (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
}
public Distribution<Cheese> getLikesDistr() {
return ((ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue()).getCurrent();
}
public Cheese getLikesValue() {
Triple t = store.get( propertyKey( "likes") );
if ( t == null ) {
return null;
} else {
return (Cheese) t.getValue();
}
}
protected Cheese getLikesCore() {
return (Cheese) store.get( propertyKey( "likes") ).getValue();
}
public void setLikes(ImperfectField<Cheese> x) {
store.put( property( "likes_$$Imp", x ) );
store.put( property( "likes", x.getCrisp() ) );
}
public void setLikesDistr(Distribution<Cheese> x) {
ImperfectField<Cheese> fld = (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "likes", fld.getCrisp() ) );
}
public void setLikesValue(Cheese x) {
ImperfectField<Cheese> fld = (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
fld.setValue( x, false );
store.put( property( "likes", fld.getCrisp() ) );
}
public void setLikesCore( Cheese x ) {
store.put( property( "likes", x ) );
}
public void updateLikesDistr(Distribution<Cheese> x) {
ImperfectField<Cheese> fld = (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "likes", fld.getCrisp() ) );
}
public void updateLikesValue(Cheese x) {
ImperfectField<Cheese> fld = (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
fld.update( x );
store.put( property( "likes", fld.getCrisp() ) );
}
public void updateLikes(ImperfectField<Cheese> x ) {
ImperfectField<Cheese> fld = (ImperfectField<Cheese>) store.get( propertyKey( "likes_$$Imp" ) ).getValue();
fld.update( x.getCurrent() );
store.put( property( "likes", fld.getCrisp() ) );
}
//TODO
// boolean hasKeys = false;
//
// if ( ! hasKeys ) {
// buildEqualityMethods( cw, masterName, core.getClassName() );
// } else {
// buildKeyedEqualityMethods( cw, trait, masterName, core.getClassName() );
// }
//
//
//
//
// buildExtendedMethods( cw, trait, core );
public String toString() {
return getFields().entrySet().toString();
}
}