Package org.lilyproject.repository.api

Examples of org.lilyproject.repository.api.MetadataBuilder


        if (!metadata.isObject()) {
            throw new JsonFormatException("The value for the metadata should be an object, field: " + recordField);
        }

        ObjectNode object = (ObjectNode)metadata;
        MetadataBuilder builder = new MetadataBuilder();

        Iterator<Map.Entry<String, JsonNode>> it = object.getFields();
        while (it.hasNext()) {
            Map.Entry<String, JsonNode> entry = it.next();
            String name = entry.getKey();
            JsonNode value = entry.getValue();

            if (value.isTextual()) {
                builder.value(name, value.getTextValue());
            } else if (value.isInt()) {
                builder.value(name, value.getIntValue());
            } else if (value.isLong()) {
                builder.value(name, value.getLongValue());
            } else if (value.isBoolean()) {
                builder.value(name, value.getBooleanValue());
            } else if (value.isFloatingPointNumber()) {
                // In the JSON format, for simplicity, we don't make distinction between float & double, so you
                // can't control which of the two is created.
                builder.value(name, value.getDoubleValue());
            } else if (value.isObject()) {
                String type = JsonUtil.getString(value, "type", null);
                if (type == null) {
                    throw new JsonFormatException("Missing required 'type' property on object in metadata field '"
                            + name + "' of record field " + recordField);
                }

                if (type.equals("binary")) {
                    JsonNode binaryValue = value.get("value");
                    if (!binaryValue.isTextual()) {
                        throw new JsonFormatException("Invalid binary value for metadata field '"
                                + name + "' of record field " + recordField);
                    }

                    try {
                        builder.value(name, new ByteArray(binaryValue.getBinaryValue()));
                    } catch (IOException e) {
                        throw new JsonFormatException("Invalid binary value for metadata field '"
                                + name + "' of record field " + recordField);
                    }
                } else if (type.equals("datetime")) {
                    JsonNode datetimeValue = value.get("value");
                    if (!datetimeValue.isTextual()) {
                        throw new JsonFormatException("Invalid datetime value for metadata field '"
                                + name + "' of record field " + recordField);
                    }

                    try {
                        builder.value(name, ISODateTimeFormat.dateTime().parseDateTime(datetimeValue.getTextValue()));
                    } catch (Exception e) {
                        throw new JsonFormatException("Invalid datetime value for metadata field '"
                                + name + "' of record field " + recordField);
                    }
                } else {
View Full Code Here


            throw new JsonFormatException("The value for the metadataToDelete should be an array, field: " + recordField);
        }

        ArrayNode array = (ArrayNode)metadataToDelete;
        if (builder == null) {
            builder = new MetadataBuilder();
        }

        for (int i = 0; i < array.size(); i++) {
            JsonNode entry = array.get(i);
            if (!entry.isTextual()) {
View Full Code Here

        // Clearing the fieldsToDelete of the metadata's is a bit more complex since those objects are immutable
        Map<QName, Metadata> changedMetadata = null;
        for (Map.Entry<QName, Metadata> metadataEntry : record.getMetadataMap().entrySet()) {
            if (metadataEntry.getValue().getFieldsToDelete().size() > 0) {
                MetadataBuilder builder = new MetadataBuilder();
                for (Map.Entry<String, Object> entry : metadataEntry.getValue().getMap().entrySet()) {
                    builder.object(entry.getKey(), entry.getValue());
                }
                if (changedMetadata == null) {
                    changedMetadata = new HashMap<QName, Metadata>();
                }
                changedMetadata.put(metadataEntry.getKey(), builder.build());
            }
        }

        if (changedMetadata != null) {
            record.getMetadataMap().putAll(changedMetadata);
View Full Code Here

        if (newMetadata == null || newMetadata.isEmpty()) {
            return oldMetadata;
        }

        MetadataBuilder result = new MetadataBuilder();

        // Run over the old values
        for (Entry<String, Object> entry : oldMetadata.getMap().entrySet()) {
            // If it's not deleted
            if (!newMetadata.getFieldsToDelete().contains(entry.getKey())) {
                // If it's not updated
                if (!newMetadata.contains(entry.getKey())) {
                    result.object(entry.getKey(), entry.getValue());
                }
            }
        }

        // Run over the new values
        for (Entry<String, Object> entry : newMetadata.getMap().entrySet()) {
            result.object(entry.getKey(), entry.getValue());
        }

        return result.build();
    }
View Full Code Here

    /**
     * Returns a metadata object with the fieldsToDelete removed.
     */
    private Metadata removeFieldsToDelete(Metadata metadata) {
        if (metadata.getFieldsToDelete().size() > 0) {
            MetadataBuilder builder = new MetadataBuilder();
            for (Map.Entry<String, Object> entry : metadata.getMap().entrySet()) {
                builder.object(entry.getKey(), entry.getValue());
            }
            return builder.build();
        } else {
            return metadata;
        }
    }
View Full Code Here

    /**
     * Tests that all supported types survive a serialize-deserialize cycle.
     */
    @Test
    public void testSerDeser() {
        Metadata metadata = new MetadataBuilder()
                .value("string", "value")
                .value("int", 5)
                .value("long", 99999999999L)
                .value("float", 3.33f)
                .value("double", 6.66d)
View Full Code Here

TOP

Related Classes of org.lilyproject.repository.api.MetadataBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.