/*
* Copyright 2010 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.core.common;
import java.io.IOException;
import java.io.InputStream;
import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.util.HashMap;
import java.util.Map;
import org.drools.core.rule.Package;
public class DroolsObjectInputStream extends ObjectInputStream
implements
DroolsObjectInput {
private static final Map<String, Class> primClasses = new HashMap<String, Class>( 8,
1.0F );
static {
primClasses.put( "boolean",
boolean.class );
primClasses.put( "byte",
byte.class );
primClasses.put( "char",
char.class );
primClasses.put( "short",
short.class );
primClasses.put( "int",
int.class );
primClasses.put( "long",
long.class );
primClasses.put( "float",
float.class );
primClasses.put( "double",
double.class );
primClasses.put( "void",
void.class );
}
private ClassLoader parentClassLoader;
private ClassLoader classLoader;
private InternalRuleBase ruleBase;
private InternalWorkingMemory workingMemory;
private Package pkg;
public DroolsObjectInputStream(InputStream inputStream) throws IOException {
this( inputStream,
null );
}
public DroolsObjectInputStream(InputStream inputStream,
ClassLoader classLoader) throws IOException {
super( inputStream );
if ( classLoader == null ) {
classLoader = Thread.currentThread().getContextClassLoader();
if ( classLoader == null ) {
classLoader = getClass().getClassLoader();
}
}
this.classLoader = classLoader;
this.parentClassLoader = classLoader;
}
protected Class resolveClass(String className) throws ClassNotFoundException {
try {
Class clazz = primClasses.get( className );
if ( clazz == null ) {
clazz = Class.forName( className,
true,
this.classLoader );
}
return clazz;
} catch ( ClassNotFoundException e ) {
throw e;
}
}
protected Class< ? > resolveClass(ObjectStreamClass desc) throws IOException,
ClassNotFoundException {
return resolveClass( desc.getName() );
}
public static InvalidClassException newInvalidClassException(Class clazz,
Throwable cause) {
InvalidClassException exception = new InvalidClassException( clazz.getName() );
exception.initCause( cause );
return exception;
}
public ClassLoader getClassLoader() {
return this.classLoader;
}
public InternalRuleBase getRuleBase() {
return ruleBase;
}
public void setRuleBase(InternalRuleBase ruleBase) {
this.ruleBase = ruleBase;
this.classLoader = this.ruleBase.getRootClassLoader();
}
public InternalWorkingMemory getWorkingMemory() {
return workingMemory;
}
public void setWorkingMemory(InternalWorkingMemory workingMemory) {
this.workingMemory = workingMemory;
}
public Package getPackage() {
return pkg;
}
public void setPackage(Package pkg) {
this.pkg = pkg;
}
// public ClassFieldAccessorCache getExtractorFactory() {
// return extractorFactory;
// }
//
// public void setExtractorFactory(ClassFieldAccessorCache extractorFactory) {
// this.extractorFactory = extractorFactory;
// }
public ClassLoader getParentClassLoader() {
return classLoader;
}
public void setClassLoader(ClassLoader classLoader) {
if ( classLoader == null ) {
classLoader = Thread.currentThread().getContextClassLoader();
if ( classLoader == null ) {
classLoader = getClass().getClassLoader();
}
}
this.classLoader = classLoader;
}
}