All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertigo.vega.plugins.webservice.handler.converter.PrimitiveJsonConverter Maven / Gradle / Ivy

The newest version!
/**
 * vertigo - simple java starter
 *
 * Copyright (C) 2013, KleeGroup, [email protected] (http://www.kleegroup.com)
 * KleeGroup, Centre d'affaire la Boursidiere - BP 159 - 92357 Le Plessis Robinson Cedex - France
 *
 * 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.
 */
package io.vertigo.vega.plugins.webservice.handler.converter;

import io.vertigo.lang.Assertion;
import io.vertigo.vega.engines.webservice.json.JsonEngine;
import io.vertigo.vega.engines.webservice.json.UTCDateUtil;
import io.vertigo.vega.engines.webservice.json.UiContext;
import io.vertigo.vega.engines.webservice.json.UiListDelta;
import io.vertigo.vega.plugins.webservice.handler.WebServiceCallContext;
import io.vertigo.vega.webservice.metamodel.WebServiceParam;

import java.util.Arrays;
import java.util.Date;

import javax.inject.Inject;

public final class PrimitiveJsonConverter implements JsonConverter {

	private final JsonEngine jsonReaderEngine;

	/**
	 * @param jsonReaderEngine jsonReaderEngine
	 */
	@Inject
	public PrimitiveJsonConverter(final JsonEngine jsonReaderEngine) {
		Assertion.checkNotNull(jsonReaderEngine);
		//-----
		this.jsonReaderEngine = jsonReaderEngine;
	}

	/** {@inheritDoc} */
	@Override
	public boolean canHandle(final Class paramClass) {
		return paramClass.isPrimitive()
				|| String.class.isAssignableFrom(paramClass)
				|| Integer.class.isAssignableFrom(paramClass)
				|| Long.class.isAssignableFrom(paramClass)
				|| Float.class.isAssignableFrom(paramClass)
				|| Double.class.isAssignableFrom(paramClass)
				|| Date.class.isAssignableFrom(paramClass);
	}

	/** {@inheritDoc} */
	@Override
	public void populateWebServiceCallContext(final Object input, final WebServiceParam webServiceParam, final WebServiceCallContext routeContext) {
		Assertion.checkArgument(getSupportedInputs()[0].isInstance(input) || getSupportedInputs()[1].isInstance(input), "This JsonConverter doesn't support this input type {0}. Only {1} is supported", input.getClass().getSimpleName(), Arrays.toString(getSupportedInputs()));
		//-----
		final Class paramClass = webServiceParam.getType();
		final Object value;
		if (input instanceof String) {
			value = readPrimitiveValue((String) input, paramClass);
		} else if (input instanceof UiContext) {
			value = ((UiContext) input).get(webServiceParam.getName());
		} else {
			throw new IllegalArgumentException(String.format("This JsonConverter can't read the asked type %s. Only %s is supported", paramClass.getSimpleName(), UiListDelta.class.getSimpleName()));
		}
		routeContext.setParamValue(webServiceParam, value);

	}

	/** {@inheritDoc} */
	@Override
	public Class[] getSupportedInputs() {
		return new Class[] { String.class, UiContext.class };
	}

	private  D readPrimitiveValue(final String json, final Class paramClass) {
		if (json == null) {
			return null;
		} else if (paramClass.isPrimitive()) {
			return jsonReaderEngine.fromJson(json, paramClass);
		} else if (String.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(json);
		} else if (Integer.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(Integer.valueOf(json));
		} else if (Long.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(Long.valueOf(json));
		} else if (Float.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(Float.valueOf(json));
		} else if (Double.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(Double.valueOf(json));
		} else if (Date.class.isAssignableFrom(paramClass)) {
			return paramClass.cast(UTCDateUtil.parse(json));
		} else {
			throw new IllegalArgumentException("Unsupported type " + paramClass.getSimpleName());
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy