package org.odata4j.examples;
import java.util.List;
import org.core4j.Enumerable;
import org.odata4j.consumer.ODataConsumer;
import org.odata4j.core.OEntity;
import org.odata4j.core.OProperty;
import org.odata4j.edm.EdmAssociation;
import org.odata4j.edm.EdmAssociationSet;
import org.odata4j.edm.EdmComplexType;
import org.odata4j.edm.EdmDataServices;
import org.odata4j.edm.EdmEntityContainer;
import org.odata4j.edm.EdmEntitySet;
import org.odata4j.edm.EdmEntityType;
import org.odata4j.edm.EdmFunctionImport;
import org.odata4j.edm.EdmFunctionParameter;
import org.odata4j.edm.EdmNavigationProperty;
import org.odata4j.edm.EdmProperty;
import org.odata4j.edm.EdmSchema;
import org.odata4j.edm.EdmType;
/**
* Copy/pasted from OData4j.
*
* @see http://code.google.com/p/odata4j/issues/detail?id=45
*/
public class BaseExample {
protected static void report(String msg) {
System.out.println(msg);
}
protected static void report(String msg, Object... args) {
System.out.println(String.format(msg, args));
}
protected static void reportEntity(String caption, OEntity entity) {
report(caption);
for (OProperty<?> p : entity.getProperties()) {
Object v = p.getValue();
if (p.getType().equals(EdmType.BINARY) && v != null)
v = org.odata4j.repack.org.apache.commons.codec.binary.Base64.encodeBase64String((byte[]) v).trim();
report(" %s: %s", p.getName(), v);
}
}
protected static int reportEntities(ODataConsumer c, String entitySet, int limit) {
report("entitySet: " + entitySet);
Enumerable<OEntity> entities = c.getEntities(entitySet).execute().take(limit);
return reportEntities(entitySet, entities);
}
protected static int reportEntities(String entitySet, Enumerable<OEntity> entities) {
int count = 0;
for (OEntity e : entities) {
reportEntity(entitySet + " entity" + count, e);
count++;
}
report("total count: %s \n\n", count);
return count;
}
private static void reportProperties(List<EdmProperty> properties) {
for (EdmProperty property : properties) {
String p = String.format("Property Name=%s Type=%s Nullable=%s", property.name, property.type, property.nullable);
if (property.maxLength != null)
p = p + " MaxLength=" + property.maxLength;
if (property.unicode != null)
p = p + " Unicode=" + property.unicode;
if (property.fixedLength != null)
p = p + " FixedLength=" + property.fixedLength;
if (property.storeGeneratedPattern != null)
p = p + " StoreGeneratedPattern=" + property.storeGeneratedPattern;
if (property.fcTargetPath != null)
p = p + " TargetPath=" + property.fcTargetPath;
if (property.fcContentKind != null)
p = p + " ContentKind=" + property.fcContentKind;
if (property.fcKeepInContent != null)
p = p + " KeepInContent=" + property.fcKeepInContent;
if (property.fcEpmContentKind != null)
p = p + " EpmContentKind=" + property.fcEpmContentKind;
if (property.fcEpmKeepInContent != null)
p = p + " EpmKeepInContent=" + property.fcEpmKeepInContent;
report(" " + p);
}
}
protected static void reportMetadata(EdmDataServices services) {
for (EdmSchema schema : services.getSchemas()) {
report("Schema Namespace=%s", schema.namespace);
for (EdmEntityType et : schema.entityTypes) {
String ets = String.format(" EntityType Name=%s", et.name);
if (et.hasStream != null)
ets = ets + " HasStream=" + et.hasStream;
report(ets);
for (String key : et.getKeys()) {
report(" Key PropertyRef Name=%s", key);
}
reportProperties(et.getScopedProperties());
for (EdmNavigationProperty np : et.getScopedNavigationProperties()) {
report(" NavigationProperty Name=%s Relationship=%s FromRole=%s ToRole=%s",
np.name, np.relationship.getFQNamespaceName(), np.fromRole.role, np.toRole.role);
}
}
for (EdmComplexType ct : schema.complexTypes) {
report(" ComplexType Name=%s", ct.name);
reportProperties(ct.properties);
}
for (EdmAssociation assoc : schema.associations) {
report(" Association Name=%s", assoc.name);
report(" End Role=%s Type=%s Multiplicity=%s", assoc.end1.role, assoc.end1.type.getFQNamespaceName(), assoc.end1.multiplicity);
report(" End Role=%s Type=%s Multiplicity=%s", assoc.end2.role, assoc.end2.type.getFQNamespaceName(), assoc.end2.multiplicity);
}
for (EdmEntityContainer ec : schema.entityContainers) {
report(" EntityContainer Name=%s IsDefault=%s LazyLoadingEnabled=%s", ec.name, ec.isDefault, ec.lazyLoadingEnabled);
for (EdmEntitySet ees : ec.entitySets) {
report(" EntitySet Name=%s EntityType=%s", ees.name, ees.type.getFQNamespaceName());
}
for (EdmAssociationSet eas : ec.associationSets) {
report(" AssociationSet Name=%s Association=%s", eas.name, eas.association.getFQNamespaceName());
report(" End Role=%s EntitySet=%s", eas.end1.role.role, eas.end1.entitySet.name);
report(" End Role=%s EntitySet=%s", eas.end2.role.role, eas.end2.entitySet.name);
}
for (EdmFunctionImport efi : ec.functionImports) {
report(" FunctionImport Name=%s EntitySet=%s ReturnType=%s HttpMethod=%s",
efi.name, efi.entitySet == null ? null : efi.entitySet.name, efi.returnType, efi.httpMethod);
for (EdmFunctionParameter efp : efi.parameters) {
report(" Parameter Name=%s Type=%s Mode=%s", efp.name, efp.type, efp.mode);
}
}
}
}
}
}