Skip to content

Instantly share code, notes, and snippets.

@hugithordarson
Created April 9, 2019 09:15
Show Gist options
  • Save hugithordarson/58609b408b496beef4ede4762866ec16 to your computer and use it in GitHub Desktop.
Save hugithordarson/58609b408b496beef4ede4762866ec16 to your computer and use it in GitHub Desktop.
package x;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.apache.cayenne.DataObject;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ObjectId;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.query.ObjectSelect;
import is.rebbi.core.kvc.KVC;
import nb.NBCore;
import nb.util.Props;
import nb.util.Props.Mode;
public class CompareData {
public static void main( String[] args ) {
final ServerRuntime informixRuntime = NBCore.createServerRuntime( new Props( Mode.Production ) );
final ServerRuntime postgresRuntime = NBCore.createServerRuntime( new Props( Mode.Development ) );
for( ObjEntity objEntity : informixRuntime.getDataDomain().getEntityResolver().getObjEntities() ) {
compareObjEntity( objEntity, informixRuntime, postgresRuntime );
}
}
private static void compareObjEntity( ObjEntity objEntity, ServerRuntime informixRuntime, ServerRuntime postgresRuntime ) {
final ObjectContext informixContext = informixRuntime.newContext();
final ObjectContext postgresContext = postgresRuntime.newContext();
final List<DataObject> informixObjects = (List<DataObject>)ObjectSelect
.query( objEntity.getJavaClass() )
.select( informixContext );
final List<DataObject> postgresObjects = (List<DataObject>)ObjectSelect
.query( objEntity.getJavaClass() )
.select( postgresContext );
final Map<ObjectId, DataObject> postgresObjectMap = new HashMap<>();
for( DataObject dataObject : postgresObjects ) {
postgresObjectMap.put( dataObject.getObjectId(), dataObject );
}
for( DataObject informixObject : informixObjects ) {
final DataObject postgresObject = postgresObjectMap.get( informixObject.getObjectId() );
if( postgresObject == null ) {
System.out.println( "missing;" + informixObject.getObjectId() );
}
else {
compareAttributeValues( objEntity, informixObject, postgresObject );
}
}
}
private static boolean compareAttributeValues( ObjEntity objEntity, DataObject do1, DataObject do2 ) {
for( ObjAttribute objAttribute : objEntity.getAttributes() ) {
final Object value1 = KVC.valueForKey( do1, objAttribute.getName() );
final Object value2 = KVC.valueForKey( do2, objAttribute.getName() );
if( !Objects.equals( value1, value2 ) ) {
System.out.println( "nonmatching;" + do1.getObjectId() + ";" + objEntity.getDbEntityName() + ";" + objAttribute.getDbAttributeName() + ";'" + value1 + "';'" + value2 + "'" );
return false;
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment