| /******************************************************************************* |
| * 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()); |
| } |
| } |