Search in sources :

Example 16 with ValueDescriptor

use of org.qi4j.api.value.ValueDescriptor in project qi4j-sdk by Qi4j.

the class ValueCompositeCxfType method isValueComposite.

@SuppressWarnings("raw")
private boolean isValueComposite(Type type) {
    Class clazz = Classes.RAW_CLASS.map(type);
    ValueDescriptor descriptor = module.valueDescriptor(clazz.getName());
    return descriptor != null;
}
Also used : ValueDescriptor(org.qi4j.api.value.ValueDescriptor)

Example 17 with ValueDescriptor

use of org.qi4j.api.value.ValueDescriptor in project qi4j-sdk by Qi4j.

the class PropertyEqualityTest method givenValuesOfTheSameTypeWhenTestingPropertyDescriptorEqualityExpectEquals.

// 
// ------------------------------:: PropertyDescriptor equality tests ::--------------------------------------------
// 
@Test
public void givenValuesOfTheSameTypeWhenTestingPropertyDescriptorEqualityExpectEquals() {
    Some some = buildSomeValue(module);
    ValueDescriptor someDescriptor = qi4j.api().valueDescriptorFor(some);
    PropertyDescriptor someCharPropDesc = someDescriptor.state().findPropertyModelByName("characterProperty");
    Some other = buildSomeValue(module);
    ValueDescriptor otherDescriptor = qi4j.api().valueDescriptorFor(other);
    PropertyDescriptor otherCharPropDesc = otherDescriptor.state().findPropertyModelByName("characterProperty");
    assertThat("PropertyDescriptors equal", someCharPropDesc, equalTo(otherCharPropDesc));
    assertThat("PropertyDescriptors hashcode equal", someCharPropDesc.hashCode(), equalTo(otherCharPropDesc.hashCode()));
}
Also used : PropertyDescriptor(org.qi4j.api.property.PropertyDescriptor) ValueDescriptor(org.qi4j.api.value.ValueDescriptor) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Example 18 with ValueDescriptor

use of org.qi4j.api.value.ValueDescriptor in project qi4j-sdk by Qi4j.

the class PropertyEqualityTest method givenValuesOfDifferentTypesWhenTestingPropertyDescriptorEqualityExpectNotEquals.

@Test
public void givenValuesOfDifferentTypesWhenTestingPropertyDescriptorEqualityExpectNotEquals() {
    Some some = buildSomeValue(module);
    ValueDescriptor someDescriptor = qi4j.api().valueDescriptorFor(some);
    PropertyDescriptor someCharPropDesc = someDescriptor.state().findPropertyModelByName("characterProperty");
    Other other = buildOtherValue(module);
    ValueDescriptor otherDescriptor = qi4j.api().valueDescriptorFor(other);
    PropertyDescriptor otherCharPropDesc = otherDescriptor.state().findPropertyModelByName("characterProperty");
    assertThat("PropertyDescriptors not equal", someCharPropDesc, not(equalTo(otherCharPropDesc)));
    assertThat("PropertyDescriptors hashcode not equal", someCharPropDesc.hashCode(), not(equalTo(otherCharPropDesc.hashCode())));
}
Also used : PropertyDescriptor(org.qi4j.api.property.PropertyDescriptor) ValueDescriptor(org.qi4j.api.value.ValueDescriptor) AbstractQi4jTest(org.qi4j.test.AbstractQi4jTest) Test(org.junit.Test)

Example 19 with ValueDescriptor

use of org.qi4j.api.value.ValueDescriptor in project qi4j-sdk by Qi4j.

the class ValueSerializerAdapter method serializeValueComposite.

private void serializeValueComposite(Object object, OutputType output, boolean includeTypeInfo, boolean rootPass) throws Exception {
    CompositeInstance valueInstance = Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map((ValueComposite) object);
    ValueDescriptor descriptor = (ValueDescriptor) valueInstance.descriptor();
    AssociationStateHolder state = (AssociationStateHolder) valueInstance.state();
    onObjectStart(output);
    if (includeTypeInfo && !rootPass) {
        onFieldStart(output, "_type");
        onValueStart(output);
        onValue(output, first(descriptor.valueType().types()).getName());
        onValueEnd(output);
        onFieldEnd(output);
    }
    for (PropertyDescriptor persistentProperty : descriptor.valueType().properties()) {
        Property<?> property = state.propertyFor(persistentProperty.accessor());
        onFieldStart(output, persistentProperty.qualifiedName().name());
        onValueStart(output);
        doSerialize(property.get(), output, includeTypeInfo, false);
        onValueEnd(output);
        onFieldEnd(output);
    }
    for (AssociationDescriptor associationDescriptor : descriptor.valueType().associations()) {
        Association<?> association = state.associationFor(associationDescriptor.accessor());
        Object instance = association.get();
        onFieldStart(output, associationDescriptor.qualifiedName().name());
        onValueStart(output);
        if (instance == null) {
            onValue(output, null);
        } else {
            onValue(output, ((Identity) instance).identity().get());
        }
        onValueEnd(output);
        onFieldEnd(output);
    }
    for (AssociationDescriptor associationDescriptor : descriptor.valueType().manyAssociations()) {
        ManyAssociation<?> manyAssociation = state.manyAssociationFor(associationDescriptor.accessor());
        onFieldStart(output, associationDescriptor.qualifiedName().name());
        onValueStart(output);
        onArrayStart(output);
        for (Object instance : manyAssociation) {
            onValueStart(output);
            onValue(output, ((Identity) instance).identity().get());
            onValueEnd(output);
        }
        onArrayEnd(output);
        onValueEnd(output);
        onFieldEnd(output);
    }
    onObjectEnd(output);
}
Also used : PropertyDescriptor(org.qi4j.api.property.PropertyDescriptor) CompositeInstance(org.qi4j.api.composite.CompositeInstance) ValueDescriptor(org.qi4j.api.value.ValueDescriptor) AssociationStateHolder(org.qi4j.api.association.AssociationStateHolder) AssociationDescriptor(org.qi4j.api.association.AssociationDescriptor) Identity(org.qi4j.api.entity.Identity)

Example 20 with ValueDescriptor

use of org.qi4j.api.value.ValueDescriptor in project qi4j-sdk by Qi4j.

the class ValueDescriptorResponseWriter method writeResponse.

@Override
public boolean writeResponse(final Object result, final Response response) throws ResourceException {
    if (result instanceof ValueDescriptor) {
        MediaType type = getVariant(response.getRequest(), ENGLISH, supportedMediaTypes).getMediaType();
        if (MediaType.APPLICATION_JSON.equals(type)) {
            JSONObject json = new JSONObject();
            ValueDescriptor vd = (ValueDescriptor) result;
            try {
                for (PropertyDescriptor propertyDescriptor : vd.state().properties()) {
                    Object o = propertyDescriptor.initialValue(module);
                    if (o == null) {
                        json.put(propertyDescriptor.qualifiedName().name(), JSONObject.NULL);
                    } else {
                        json.put(propertyDescriptor.qualifiedName().name(), o.toString());
                    }
                }
            } catch (JSONException e) {
                throw new ResourceException(e);
            }
            StringRepresentation representation = new StringRepresentation(json.toString(), MediaType.APPLICATION_JSON);
            response.setEntity(representation);
            return true;
        } else if (MediaType.TEXT_HTML.equals(type)) {
            Representation rep = new WriterRepresentation(MediaType.TEXT_HTML) {

                @Override
                public void write(Writer writer) throws IOException {
                    Map<String, Object> context = new HashMap<String, Object>();
                    context.put("request", response.getRequest());
                    context.put("response", response);
                    context.put("result", result);
                    try {
                        cfg.getTemplate("form.htm").process(context, writer);
                    } catch (TemplateException e) {
                        throw new IOException(e);
                    }
                }
            };
            response.setEntity(rep);
            return true;
        }
    }
    return false;
}
Also used : PropertyDescriptor(org.qi4j.api.property.PropertyDescriptor) TemplateException(freemarker.template.TemplateException) ValueDescriptor(org.qi4j.api.value.ValueDescriptor) JSONException(org.json.JSONException) StringRepresentation(org.restlet.representation.StringRepresentation) Representation(org.restlet.representation.Representation) WriterRepresentation(org.restlet.representation.WriterRepresentation) IOException(java.io.IOException) JSONObject(org.json.JSONObject) StringRepresentation(org.restlet.representation.StringRepresentation) WriterRepresentation(org.restlet.representation.WriterRepresentation) MediaType(org.restlet.data.MediaType) JSONObject(org.json.JSONObject) ResourceException(org.restlet.resource.ResourceException) HashMap(java.util.HashMap) Map(java.util.Map) Writer(java.io.Writer)

Aggregations

ValueDescriptor (org.qi4j.api.value.ValueDescriptor)22 PropertyDescriptor (org.qi4j.api.property.PropertyDescriptor)10 Test (org.junit.Test)6 AbstractQi4jTest (org.qi4j.test.AbstractQi4jTest)6 AssociationStateHolder (org.qi4j.api.association.AssociationStateHolder)4 EntityDescriptor (org.qi4j.api.entity.EntityDescriptor)4 ValueComposite (org.qi4j.api.value.ValueComposite)4 IOException (java.io.IOException)3 Writer (java.io.Writer)3 Identity (org.qi4j.api.entity.Identity)3 ValueSerializationException (org.qi4j.api.value.ValueSerializationException)3 AnotherSome (org.qi4j.runtime.property.PropertyEqualityTest.AnotherSome)3 Some (org.qi4j.runtime.property.PropertyEqualityTest.Some)3 TemplateException (freemarker.template.TemplateException)2 HashMap (java.util.HashMap)2 AssociationDescriptor (org.qi4j.api.association.AssociationDescriptor)2 AssociationStateDescriptor (org.qi4j.api.association.AssociationStateDescriptor)2 QualifiedName (org.qi4j.api.common.QualifiedName)2 CompositeDescriptor (org.qi4j.api.composite.CompositeDescriptor)2 CompositeInstance (org.qi4j.api.composite.CompositeInstance)2