/**
* Copyright (C) 2010 Michael Mosmann <michael@mosmann.de>
*
* 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 de.flapdoodle.mongoom.testlab;
import java.awt.Color;
import java.util.Calendar;
import java.util.Date;
import junit.framework.TestCase;
import com.mongodb.DBObject;
import de.flapdoodle.mongoom.mapping.IEntityTransformation;
import de.flapdoodle.mongoom.mapping.ITransformation;
import de.flapdoodle.mongoom.mapping.context.IMappingContext;
import de.flapdoodle.mongoom.mapping.entities.EntityVisitor;
import de.flapdoodle.mongoom.mapping.properties.Property;
import de.flapdoodle.mongoom.mapping.properties.PropertyReference;
import de.flapdoodle.mongoom.mapping.types.color.Colors;
import de.flapdoodle.mongoom.testlab.beans.ColorBean;
import de.flapdoodle.mongoom.testlab.beans.ColorBean.ColorView;
import de.flapdoodle.mongoom.testlab.beans.DateBean;
public class TestCustomTransformation extends TestCase {
public void testColor() {
IMappingContext mappingContext = new ColorMappingContext();
EntityVisitor<ColorBean> entityVisitor = new EntityVisitor<ColorBean>();
IEntityTransformation<ColorBean> transformation = entityVisitor.transformation(mappingContext, ColorBean.class);
assertNotNull(transformation);
ColorBean dummy = new ColorBean();
dummy.setColor(new Color(200,100,50,88));
DBObject dbObject = transformation.asObject(dummy);
System.out.println("DBObject:" + dbObject);
ColorBean read = transformation.asEntity(dbObject);
System.out.println("ColorBean:" + read);
assertEquals("Eq", dummy, read);
ITransformation<Color, DBObject> colorTrans = (ITransformation<Color, DBObject>) transformation.propertyTransformation(transformation.propertyName(Property.ref("color", Color.class)));
Color sourceColor = new Color(1,2,3,4);
DBObject colorAsObject = colorTrans.asObject(sourceColor);
System.out.println("DBObject.Color:" + colorAsObject);
Color color = colorTrans.asEntity(colorAsObject);
assertEquals("Eq", sourceColor, color);
ITransformation<Integer, Object> rtrans = (ITransformation<Integer, Object>) colorTrans.propertyTransformation(colorTrans.propertyName(Colors.Red));
Integer value=12;
Object object = rtrans.asObject(value);
Integer propertyValue = rtrans.asEntity(object);
assertEquals("Eq", value, propertyValue);
ITransformation<ColorView, DBObject> viewTransformation = transformation.viewTransformation(ColorBean.ColorView.class);
dbObject = transformation.asObject(dummy);
ColorView colorView = viewTransformation.asEntity(dbObject);
assertEquals("Eq.Red", dummy.getColor().getRed(),colorView.getRed());
assertEquals("Eq.Color", dummy.getColor(),colorView.getColor());
}
public void testDate() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2011);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 4);
cal.set(Calendar.HOUR, 15);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 45);
cal.set(Calendar.MILLISECOND, 0);
Date date=cal.getTime();
IMappingContext mappingContext = new DateMappingContext();
EntityVisitor<DateBean> entityVisitor = new EntityVisitor<DateBean>();
IEntityTransformation<DateBean> transformation = entityVisitor.transformation(mappingContext, DateBean.class);
assertNotNull(transformation);
DateBean dummy = new DateBean();
dummy.setDate(date);
DBObject dbObject = transformation.asObject(dummy);
System.out.println("DBObject:" + dbObject);
DateBean read = transformation.asEntity(dbObject);
System.out.println("DateBean:" + read);
assertEquals("Eq", dummy, read);
ITransformation<Date, DBObject> dateTrans = (ITransformation<Date, DBObject>) transformation.propertyTransformation(transformation.propertyName(Property.ref("date", Date.class)));
DBObject dateAsObject = dateTrans.asObject(date);
System.out.println("DBObject.Date:" + dateAsObject);
Date readDate = dateTrans.asEntity(dateAsObject);
assertEquals("Eq", date, readDate);
ITransformation<Integer, Object> rtrans = (ITransformation<Integer, Object>) dateTrans.propertyTransformation(dateTrans.propertyName(Property.ref("year",Integer.class)));
Integer value=1973;
Object object = rtrans.asObject(value);
Integer propertyValue = rtrans.asEntity(object);
assertEquals("Eq", value, propertyValue);
}
}