blob: c0c1df16dc3ca14c0a6b570803c159919a25c1b0 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.sdo.helper.xsdhelper.define;
import commonj.sdo.DataObject;
import commonj.sdo.Type;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import junit.textui.TestRunner;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDOProperty;
import org.eclipse.persistence.sdo.SDOType;
import org.eclipse.persistence.sdo.helper.SDOXSDHelper;
import org.eclipse.persistence.sdo.helper.SchemaResolver;
import org.eclipse.persistence.internal.helper.ClassConstants;
import org.xml.sax.InputSource;
public class DefineWithImportsNoSchemaLocationTestCases extends XSDHelperDefineTestCases {
public DefineWithImportsNoSchemaLocationTestCases(String name) {
super(name);
}
public static void main(String[] args) {
TestRunner.run(DefineWithImportsNoSchemaLocationTestCases.class);
}
@Override
public void testDefine() {
InputStream is = getSchemaInputStream(getSchemaToDefine());
List types = ((SDOXSDHelper) xsdHelper).define(new StreamSource(is), new TestResolver(getSchemaLocation()));
log("\nExpected:\n");
List controlTypes = getControlTypes();
log(controlTypes);
log("\nActual:\n");
log(types);
compare(getControlTypes(), types);
}
@Override
public String getSchemaToDefine() {
return "org/eclipse/persistence/testing/sdo/helper/xsdhelper/generate/ImportsWithNamespacesNoSchemaLocations.xsd";
}
@Override
protected String getSchemaLocation() {
return FILE_PROTOCOL + USER_DIR + "/org/eclipse/persistence/testing/sdo/helper/xsdhelper/generate/";
}
@Override
public List<Type> getControlTypes() {
String uri = "my.uri";
String uri2 = "my.uri2";
String uri3 = "my.uri3";
String uri4 = "my.uri4";
String javaPackage = "uri.my";
SDOType stringType = (SDOType) typeHelper.getType("commonj.sdo", "String");
SDOType intType = (SDOType) typeHelper.getType("commonj.sdo", "Int");
// create a new Type for USAddress
DataObject USaddrDO = dataFactory.create("commonj.sdo", "Type");
USaddrDO.set("uri", "my.uri2");
USaddrDO.set("name", "USAddress");
DataObject streetProperty = USaddrDO.createDataObject("property");
streetProperty.set("name", "street");
DataObject cityProperty = USaddrDO.createDataObject("property");
cityProperty.set("name", "city");
SDOType usAddrType = (SDOType) typeHelper.define(USaddrDO);
usAddrType.setInstanceClassName("uri2.my.USAddress");
// create a new Type for Quantity
DataObject QuantityTypeDO = dataFactory.create("commonj.sdo", "Type");
QuantityTypeDO.set("uri", "my.uri3");
QuantityTypeDO.set("name", "quantityType");
SDOType quantityType = (SDOType) typeHelper.define(QuantityTypeDO);
quantityType.addBaseType(intType);
quantityType.setInstanceClassName(ClassConstants.PINT.getName());
// create a new Type for SKU
DataObject SkuDO = dataFactory.create("commonj.sdo", "Type");
SkuDO.set("uri", "my.uri4");
SkuDO.set("name", "SKU");
SDOType skuType = (SDOType) typeHelper.define(SkuDO);
skuType.addBaseType(stringType);
skuType.setInstanceClassName("java.lang.String");
// create a new Type for PurchaseOrder
DataObject PurchaseOrderDO = dataFactory.create("commonj.sdo", "Type");
PurchaseOrderDO.set("uri", "my.uri");
PurchaseOrderDO.set("name", "PurchaseOrder");
DataObject shipToProperty = PurchaseOrderDO.createDataObject("property");
shipToProperty.set("name", "shipTo");
shipToProperty.set("type", usAddrType);
DataObject billToProperty = PurchaseOrderDO.createDataObject("property");
billToProperty.set("name", "billTo");
billToProperty.set("type", usAddrType);
DataObject quantityProperty = PurchaseOrderDO.createDataObject("property");
quantityProperty.set("name", "quantity");
quantityProperty.set("type", quantityType);
DataObject partNumberProperty = PurchaseOrderDO.createDataObject("property");
partNumberProperty.set("name", "partNum");
partNumberProperty.set("type", skuType);
SDOType purchaseOrderType = (SDOType) typeHelper.define(PurchaseOrderDO);
purchaseOrderType.setInstanceClassName("uri.my.PurchaseOrder");
List<Type> types = new ArrayList<Type>();
types.add(purchaseOrderType);
types.add(skuType);
types.add(usAddrType);
types.add(quantityType);
return types;
}
static class TestResolver implements SchemaResolver {
String schemaLocationBase;
TestResolver(String schemaLocation) {
this.schemaLocationBase = schemaLocation;
}
@Override
public Source resolveSchema(Source sourceXSD, String namespace, String schemaLocation) {
try {
if (namespace.equals("my.uri3")) {
URL schemaUrl = new URI(schemaLocationBase).resolve("Quantity.xsd").toURL();
return new StreamSource(schemaUrl.toExternalForm());
} else if (namespace.equals("my.uri2")) {
URL schemaUrl = new URI(schemaLocationBase).resolve("Address.xsd").toURL();
return new StreamSource(schemaUrl.toExternalForm());
} else if (namespace.equals("my.uri4")) {
URL schemaUrl = new URI(schemaLocationBase).resolve("SKU.xsd").toURL();
return new StreamSource(schemaUrl.toExternalForm());
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return null;
}
/**
* Satisfy EntityResolver interface implementation.
* Allow resolution of external entities.
*
* @return null
*/
@Override
public InputSource resolveEntity(String publicId, String systemId) {
return null;
}
}
}