/* * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * tdelprat */ package org.nuxeo.ecm.automation.core.impl.adapters; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.codehaus.jackson.JsonNode; import org.nuxeo.ecm.automation.OperationContext; import org.nuxeo.ecm.automation.TypeAdaptException; import org.nuxeo.ecm.automation.TypeAdapter; import org.nuxeo.ecm.automation.core.util.Properties; public class JsonNodeToProperties implements TypeAdapter { @Override public Object getAdaptedValue(OperationContext ctx, Object objectToAdapt) throws TypeAdaptException { JsonNode json = (JsonNode) objectToAdapt; Map<String, String> map = new HashMap<String, String>(); Iterator<Entry<String, JsonNode>> it = json.getFields(); while (it.hasNext()) { Entry<String, JsonNode> entry = it.next(); String key = entry.getKey(); JsonNode value = entry.getValue(); if (value.isArray()) { int size = value.size(); if (size == 0) { map.put(key, null); } else if (size == 1) { map.put(key, value.get(0).getValueAsText()); } else { StringBuilder buf = new StringBuilder(size * 32); buf.append(value.get(0).getValueAsText()); for (int i = 1; i < size; i++) { buf.append(',').append(value.get(i).getValueAsText()); } map.put(key, buf.toString()); } } else { if (value.isTextual()) { map.put(key, value.getTextValue()); } else { map.put(key, value.toString()); } } } return new Properties(map); } }