开发者

Working out a Google App engine entity's property data type

开发者 https://www.devze.com 2023-03-21 16:06 出处:网络
I have this entity - I\'m trying to determine the type of its properties - in Google App Engine\'s internal data-types PREFERRED (as opposed to Java data types).

I have this entity - I'm trying to determine the type of its properties - in Google App Engine's internal data-types PREFERRED (as opposed to Java data types).

The below code is obviously simplified. In reality I do not know the entity's properties or anything else about it.

final DatastoreService dss = DatastoreServiceFactory.getDatastoreService();
final Query query = new Query("Person");
final PreparedQuery pq = dss.prepare(query);

for (Entity entity : pq.asIterable())
{
    final Object property = entity.getProperty("some_property");
    // Here I want to determine which data type 'property' represents - GAE-wise.
}

In App Engine's Java code I've found some hints:

DataTypeTranslator
    DataTypeTranslator.typeMap (internal private member)
Property.Meaning.GD_PHONENUMBER

I'm unable to link those together into what I nee开发者_StackOverflowd - some sort of reflection.

I wish I was able to do something like this:

entity.getPropertyType("some_property");

Does anyone know better?

DataTypeTranslator source code here

Edit #1: << INGORE this one. It's me who put these postfixes (I was confused by the doc).

Here's more important info I've found.

I'm getting it in Eclipse' tool-tip mini-window when I point over an entity (one which I just fetched from the Datastore).

The Datastore seems to send it (this payload) as raw text which is nice, maybe I'll have to parse it (but, how do I get it from code LOL).

Pay attention to the types in here, it's written plain simple.

Here it is:

<Entity [Bird(9)]:
    Int64Type:44rmna4kc2g23i9brlupps74ir#Int64Type = 1234567890
    String:igt7qvk9p89nc3gjqn9s3jq69c = 7tns1l48vpttq5ff47i3jlq3f9
    PhoneNumber:auih50aecl574ud23v9h4rfvt1#PhoneNumberType = 03-6491234
    Date:k1qstkn9np0mpb6fp41cj6i3am = Wed Jul 20 23:03:13 UTC 2011
>

For example, property named String:igt7qvk9p89nc3gjqn9s3jq69c has the value of 7tns1l48vpttq5ff47i3jlq3f9 and it doesn't tell its type. Also property Date:k1qstkn9np0mpb6fp41cj6i3am.

Property named Int64Type:44rmna4kc2g23i9brlupps74ir has the value of "1234567890" and here it strictly mentions that the data type is of "Int64Type".


I'm searching for it too.

It's a bit of a hack, but at least my output includes the type (without needing a secret decoder ring). But my code is slightly different:

Query allusersentityquery = new Query();
allusersentityquery.setAncestor(userKey);

for (final Entity entity : datastore.prepare(allusersentityquery).asIterable()) {
    Map<String, Object> properties = entity.getProperties();
    String[] propertyNames = properties.keySet().toArray(
        new String[properties.size()]);

    for(final String propertyName : propertyNames) {
      // propertyNames string contains
      // "com.google.appengine.api.datastore.PostalAddress" if it is a Postal Address
    }
}

There seems to be no documents about determining the Property Types here.

0

精彩评论

暂无评论...
验证码 换一张
取 消