/* * Copyright 2010 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; import java.util.Calendar; import java.util.Date; import org.drools.core.base.ClassFieldAccessorCache; import org.drools.core.base.ClassFieldAccessorStore; import org.drools.core.common.ProjectClassLoader; import org.drools.core.rule.JavaDialectRuntimeData; import org.drools.core.rule.JavaDialectRuntimeData.PackageClassLoader; import org.junit.Test; import org.kie.internal.utils.ClassLoaderUtil; import static org.drools.core.util.ClassUtils.convertClassToResourcePath; /** * @version $Id$ */ public class InstancesHashcodedTest { /* <dimension name="bck_cycle_dm" item-expression="cycleDimension" mode="ignore" cache="10" export-to="cycle_id"> <id name="objid" type="long" generator-sql="select bck_dimensions_uid.nextval from dual"/> <field name="cut_date" type="java.util.Date" value="cutDate" key="true"/> <field name="due_date" type="java.util.Date" value="dueDate" key="true"/> <field name="cycle_code" type="java.lang.String" value="cycleCode"/> <field name="issue_date" type="java.util.Date" value="issueDate"/> </dimension> */ private Class build(ClassBuilder builder, ClassDefinition classDef) throws Exception { ProjectClassLoader prjClassLoader = ProjectClassLoader.createProjectClassLoader(); byte[] d = builder.buildClass( classDef, prjClassLoader ); JavaDialectRuntimeData data = new JavaDialectRuntimeData(); data.write( convertClassToResourcePath(classDef.getClassName()), d ); ClassLoader classLoader = new PackageClassLoader(data, prjClassLoader); ClassFieldAccessorStore store = new ClassFieldAccessorStore(); store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) ); store.setEagerWire( true ); Class clazz = classLoader.loadClass( classDef.getClassName() ); classDef.setDefinedClass( clazz ); return clazz; } @Test public void testInstanceHashcodes() { ClassDefinition cd = new ClassDefinition( "br.com.auster.TestClass2", null, new String[]{} ); cd.addField(new FieldDefinition("cutDate", "java.util.Date", true)); cd.addField(new FieldDefinition("dueDate", "java.util.Date", true)); cd.addField(new FieldDefinition("issueDate", "java.util.Date", false)); cd.addField(new FieldDefinition("cycleCode", "java.lang.String", false)); ClassBuilder cb = new ClassBuilderFactory().getBeanClassBuilder(); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2006); cal.set(Calendar.MONTH, Calendar.JUNE); cal.set(Calendar.DAY_OF_MONTH, 01); Date cut = cal.getTime(); cal.set(Calendar.MONTH, Calendar.JULY); cal.set(Calendar.DAY_OF_MONTH, 13); Date d1 = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, 15); Date d2 = cal.getTime(); try { Class klass = build(cb, cd); Object o1 = klass.newInstance(); cd.getField("cutDate").getFieldAccessor().setValue(o1, cut); cd.getField("dueDate").getFieldAccessor().setValue(o1, d1); Object o2 = klass.newInstance(); cd.getField("cutDate").getFieldAccessor().setValue(o2, cut); cd.getField("dueDate").getFieldAccessor().setValue(o2, d2); // System.out.println(o1); // System.out.println(o1.hashCode()); // System.out.println(o2); // System.out.println(o2.hashCode()); // // System.out.println(o1.equals(o2)); } catch (Exception e) { // e.printStackTrace(); } } }