blob: 8e79e107631b037abb4f529b53073e02cf2a2cab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle - initial API and implementation
*******************************************************************************/
package org.eclipse.jpt.jaxb.core.tests.internal.context.java;
import java.util.Iterator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jpt.common.core.tests.internal.projects.TestJavaProject.SourceWriter;
import org.eclipse.jpt.common.utility.internal.CollectionTools;
import org.eclipse.jpt.common.utility.internal.iterators.ArrayIterator;
import org.eclipse.jpt.jaxb.core.context.JaxbClass;
import org.eclipse.jpt.jaxb.core.context.JaxbClassMapping;
import org.eclipse.jpt.jaxb.core.context.JaxbPersistentAttribute;
import org.eclipse.jpt.jaxb.core.context.XmlAdapter;
import org.eclipse.jpt.jaxb.core.context.XmlElementMapping;
import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.resource.java.JAXB;
import org.eclipse.jpt.jaxb.core.tests.internal.context.JaxbContextModelTestCase;
public class GenericJavaXmlAdapterTests
extends JaxbContextModelTestCase {
public GenericJavaXmlAdapterTests(String name) {
super(name);
}
private ICompilationUnit createXmlType() throws Exception {
return this.createTestType(
new DefaultAnnotationWriter() {
@Override
public Iterator<String> imports() {
return new ArrayIterator<String>(JAXB.XML_TYPE);
}
@Override
public void appendTypeAnnotationTo(StringBuilder sb) {
sb.append("@XmlType");
}
});
}
private void createObjObjXmlAdapter() throws CoreException {
SourceWriter sourceWriter = new SourceWriter() {
public void appendSourceTo(StringBuilder sb) {
sb.append(CR);
sb.append("import " + JAXB.XML_ADAPTER + ";").append(CR);
sb.append(CR);
sb.append("public class ObjObjAdapter extends XmlAdapter<Object, Object> {").append(CR);
sb.append(" public Object marshal(Object obj) { return null; }").append(CR);
sb.append(" public Object unmarshal(Object obj) { return null; }").append(CR);
sb.append("}").append(CR);
}
};
this.javaProject.createCompilationUnit(PACKAGE_NAME, "ObjObjAdapter.java", sourceWriter);
}
private void createMapCalendarXmlAdapter() throws CoreException {
SourceWriter sourceWriter = new SourceWriter() {
public void appendSourceTo(StringBuilder sb) {
sb.append(CR);
sb.append("import " + JAXB.XML_ADAPTER + ";").append(CR);
sb.append("import java.util.Map;").append(CR);
sb.append("import java.util.GregorianCalendar;").append(CR);
sb.append(CR);
sb.append("public class MapCalendarAdapter extends XmlAdapter<GregorianCalendar, Map<String, String>> {").append(CR);
sb.append(" public GregorianCalendar marshal(Map<String, String> obj) { return null; }").append(CR);
sb.append(" public GregorianCalendar marshal(Object obj) { return null; }").append(CR);
sb.append(" public Map<String, String> unmarshal(Gregorian Calendar obj) { return null; }").append(CR);
sb.append("}").append(CR);
}
};
this.javaProject.createCompilationUnit(PACKAGE_NAME, "MapCalendarAdapter.java", sourceWriter);
}
public void testBoundAndValueTypes() throws Exception {
createXmlType();
JaxbClass jaxbClass = (JaxbClass) CollectionTools.get(getContextRoot().getTypes(), 0);
JaxbClassMapping classMapping = jaxbClass.getMapping();
JaxbPersistentAttribute persistentAttribute = CollectionTools.get(classMapping.getAttributes(), 0);
XmlElementMapping attributeMapping = (XmlElementMapping) persistentAttribute.getMapping();
XmlJavaTypeAdapter xmlJavaTypeAdapter = attributeMapping.addXmlJavaTypeAdapter();
xmlJavaTypeAdapter.setValue("test.ObjObjAdapter");
assertEquals("test.ObjObjAdapter", xmlJavaTypeAdapter.getValue());
assertEquals("test.ObjObjAdapter", xmlJavaTypeAdapter.getFullyQualifiedValue());
assertNull(xmlJavaTypeAdapter.getXmlAdapter());
createObjObjXmlAdapter();
XmlAdapter xmlAdapter = xmlJavaTypeAdapter.getXmlAdapter();
assertNotNull(xmlAdapter);
assertEquals("java.lang.Object", xmlAdapter.getBoundType());
assertEquals("java.lang.Object", xmlAdapter.getValueType());
createMapCalendarXmlAdapter();
xmlJavaTypeAdapter.setValue("test.MapCalendarAdapter");
xmlAdapter = xmlJavaTypeAdapter.getXmlAdapter();
assertNotNull(xmlAdapter);
assertEquals("java.util.Map", xmlAdapter.getBoundType());
assertEquals("java.util.GregorianCalendar", xmlAdapter.getValueType());
}
}