All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.drools.core.factmodel.traits.TraitFactory Maven / Gradle / Ivy

There is a newer version: 9.44.0.Final
Show newest version
/*
 * Copyright 2011 Red Hat, Inc. and/or its affiliates.
 *
 * 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.core.factmodel.traits;

import org.drools.core.base.ClassFieldAccessorStore;
import org.drools.core.definitions.InternalKnowledgePackage;
import org.drools.core.definitions.impl.KnowledgePackageImpl;
import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.reteoo.KieComponentFactory;
import org.drools.core.util.ClassUtils;
import org.drools.core.util.HierarchyEncoder;
import org.drools.core.util.TripleFactory;
import org.drools.core.util.TripleStore;
import org.kie.api.KieBase;
import org.mvel2.asm.Opcodes;

import java.io.Externalizable;
import java.util.HashSet;
import java.util.Set;

public class TraitFactory, K extends TraitableBean> extends AbstractTraitFactory implements Opcodes, Externalizable {

    private transient InternalKnowledgeBase kBase;

    private transient Set runtimeClasses;

    public static void setMode( VirtualPropertyMode newMode, KieBase kBase ) {
        KieComponentFactory rcf = ((InternalKnowledgeBase) kBase).getConfiguration().getComponentFactory();
        setMode( newMode, rcf );
    }

    public static TraitFactory getTraitBuilderForKnowledgeBase( KieBase kb ) {
        return ((InternalKnowledgeBase) kb).getConfiguration().getComponentFactory().getTraitFactory();
    }

    public TraitFactory() {

    }

    protected Class registerAndLoadTypeDefinition( String proxyName, byte[] proxy ) throws ClassNotFoundException {
        registerRuntimeClass( proxyName );
        return kBase.registerAndLoadTypeDefinition( proxyName, proxy );
    }

    private void registerRuntimeClass( String proxyName ) {
        if ( runtimeClasses == null ) {
            runtimeClasses = new HashSet<>();
        }
        runtimeClasses.add( ClassUtils.convertClassToResourcePath( proxyName ) );
    }

    protected ClassLoader getRootClassLoader() {
        return kBase.getRootClassLoader();
    }

    protected KieComponentFactory getComponentFactory() {
        return kBase.getConfiguration().getComponentFactory();
    }

    protected TraitRegistry getTraitRegistry() {
        return kBase.getTraitRegistry();
    }

    protected HierarchyEncoder getHierarchyEncoder() {
        return getTraitRegistry().getHierarchy();

    }

    protected TripleStore getTripleStore() {
        return kBase.getTripleStore();
    }

    protected TripleFactory getTripleFactory() {
        return getComponentFactory().getTripleFactory();
    }

    protected ClassFieldAccessorStore getClassFieldAccessorStore() {
        InternalKnowledgePackage traitPackage = kBase.getPackagesMap().get( pack );
        if ( traitPackage == null ) {
            traitPackage = new KnowledgePackageImpl( pack );
            traitPackage.setClassFieldAccessorCache( kBase.getClassFieldAccessorCache() );
            kBase.getPackagesMap().put( pack, traitPackage );
        }
        return traitPackage.getClassFieldAccessorStore();
    }


    public InternalKnowledgeBase getKnowledgeBase() {
        return kBase;
    }

    public void setRuleBase( InternalKnowledgeBase kBase ) {
        this.kBase = kBase;
    }

    public static TraitTypeEnum determineTraitType( Object object ) {
        if ( object instanceof TraitProxy ) {
            return TraitTypeEnum.TRAIT;
        } else if ( object instanceof CoreWrapper ) {
            return TraitTypeEnum.WRAPPED_TRAITABLE;
        } else if ( object instanceof TraitableBean ) {
            return TraitTypeEnum.TRAITABLE;
        } else {
            return TraitTypeEnum.LEGACY_TRAITABLE;
        }
    }

    public boolean isRuntimeClass( String resourceName ) {
        return runtimeClasses != null && runtimeClasses.contains( resourceName );
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy