blob: 1b2f65fe65e8acada2e744596d8d50cdf36fcf90 [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
/**
* @version $Header: ChangeSummaryLoadSaveTestCases.java 16-may-2007.13:47:16 mfobrien Exp $
* @author mfobrien
* @since release specific (what release of product did this appear in)
*/
package org.eclipse.persistence.testing.sdo.model.changesummary;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.Type;
import commonj.sdo.helper.XMLDocument;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Iterator;
import java.util.List;
import org.eclipse.persistence.sdo.SDOChangeSummary;
import org.eclipse.persistence.sdo.SDOConstants;
import org.eclipse.persistence.sdo.SDODataObject;
public class ChangeSummaryLoadSaveTestCases extends ChangeSummaryTestCases {
//protected Property changeSummaryProperty;
protected static final String ROOT_TYPE_NAME//
= "dataObject";
protected static final String ROOT_TYPE_URI//
= "commonj.sdo";
protected SDODataObject root;
protected SDODataObject rootCSOnChild;
public ChangeSummaryLoadSaveTestCases(String name) {
super(name);
}
public SDODataObject loadObjectFromXML(String path) throws IOException {
FileInputStream inStream = new FileInputStream(path);
XMLDocument document = xmlHelper.load(inStream);
SDODataObject anObject = (SDODataObject)document.getRootObject();
inStream.close();
return anObject;
}
protected void setChangeSummary(SDODataObject aCSRoot) {
// get and set change summary (temp workaround does not propagate to children)
SDOChangeSummary aCS = (SDOChangeSummary)aCSRoot.get("myChangeSummary");
//SDOChangeSummary aCS = new SDOChangeSummary();
aCS.setRootDataObject(aCSRoot);
aCSRoot._setChangeSummary(aCS);
aCSRoot.getChangeSummary().endLogging();
//aCSRoot.getChangeSummary().beginLogging();
//ChangeSummary changeSummary = aCSRoot.getChangeSummary();
//changeSummary.endLogging();
}
public void serialize(SDODataObject anObject, String filename) {
// declare streams and objects
FileOutputStream fo = null;
ObjectOutputStream so = null;
try {
// serialize
fo = new FileOutputStream(filename);
//so = new ObjectOutputStream(fo);
xmlHelper.save(anObject,//
null,//rootTypeUri,//
"root",//rootTypeName,//
fo);
// display object representation to the stream
log("Serialized Object: " + dataObjectToString(anObject));
// display XML representation to the stream
if (anObject != null) {
xmlHelper.save(anObject,//
null,//rootTypeUri,//
"root",//rootTypeName,//
System.out);
}
//so.flush();
fo.close();
//so.close();
} catch (Exception e) {
e.printStackTrace();
fail("SDOResolvableTestCases.serialize() failed to write Object");
}
}
/**
* Write an object representation of the SDODataObject to the stream
* @return
* String
*/
private String dataObjectToString(SDODataObject anObject) {
if (anObject == null) {
return SDOConstants.EMPTY_STRING;
}
StringBuffer aBuffer = new StringBuffer();
aBuffer.append(anObject.toString());
aBuffer.append("\n\t root: ");
aBuffer.append(anObject.getRootObject());
aBuffer.append("\n\t type: ");
aBuffer.append(anObject.getType());
aBuffer.append(" name: ");
aBuffer.append(anObject.getType().getName());
aBuffer.append("\n\t properties: (");
// iterate any properties
List properties = anObject.getInstanceProperties();
if (!properties.isEmpty()) {
List keys = anObject.getInstanceProperties();
Iterator anIterator = keys.iterator();
while (anIterator.hasNext()) {
Property aKey = (Property)anIterator.next();
aBuffer.append(aKey.getName());
aBuffer.append(":");
aBuffer.append(anObject.get(aKey));
aBuffer.append(",\n\t\t");
}
}
aBuffer.append(")");
return aBuffer.toString();
}
protected String getXSDString(String filename) {
try {
FileInputStream inStream = new FileInputStream(filename);
byte[] bytes = new byte[inStream.available()];
inStream.read(bytes);
return new String(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void printDataObject(DataObject dataObject, int indent) {
String margin = "";
for (int i = 0; i < indent; i++) {
margin += "\t";
}
System.out.println(margin + "DataObject: " + dataObject);
// For each Property
List properties = dataObject.getInstanceProperties();
for (int p = 0, size = properties.size(); p < size; p++) {
if (dataObject.isSet(p)) {
Property property = (Property)properties.get(p);
if (property.isMany()) {
// For many-valued properties, process a list of values
List values = dataObject.getList(p);
for (int v = 0, count = values.size(); v < count; v++) {
printValue(values.get(v), property, indent);
}
} else {
// For single-valued properties, print out the value
printValue(dataObject.get(p), property, indent);
}
}
}
}
void printValue(Object value, Property property, int indent) {
// Get the name of the property
String propertyName = property.getName();
// Construct a string for the proper indentation
String margin = "";
for (int i = 0; i < indent; i++) {
margin += "\t";
}
if ((value != null) && property.isContainment()) {
// with printDataObject
Type type = property.getType();
String typeName = type.getName();
System.out.println(margin + propertyName + " (" + typeName + "):");
// our implementation needs the following instanceof check not in the spec
if (value instanceof DataObject) {
printDataObject((DataObject)value, indent + 1);
} else {
System.out.println(margin + propertyName + ": " + value);
}
} else {
// For non-containment properties, just print the value
System.out.println(margin + propertyName + ": " + value);
}
}
}