/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.valuerequirementname; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONStringer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.util.ArgumentChecker; import com.opengamma.web.AbstractWebResource; /** * RESTful resource that returns the value requirement names for the Web GUI. */ @Path("/valuerequirementnames/metaData") public class WebValueRequirementNamesResource extends AbstractWebResource { /** Logger. */ private static final Logger s_logger = LoggerFactory.getLogger(WebValueRequirementNamesResource.class); /** * Configuration key. */ public static final String VALUE_REQUIREMENT_NAME_CLASSES = "valueRequirementNameClasses"; /** * The value requirement names. */ private final Set<String> _valueRequirementNames; //------------------------------------------------------------------------- /** * Creates the resource. */ public WebValueRequirementNamesResource() { final List<String> list = new ArrayList<String>(); for (Field field : ValueRequirementNames.class.getDeclaredFields()) { try { list.add((String) field.get(null)); } catch (Exception ex) { s_logger.warn("Could not read in value requirement names: " + ex.getMessage()); } } Collections.sort(list, String.CASE_INSENSITIVE_ORDER); _valueRequirementNames = new LinkedHashSet<String>(list); } /** * Creates an instance. * * @param valueRequirementNameClasses the classes, not null */ public WebValueRequirementNamesResource(String[] valueRequirementNameClasses) { ArgumentChecker.notEmpty(valueRequirementNameClasses, "valueRequirementNameClasses"); final List<String> list = new ArrayList<String>(); for (String className : valueRequirementNameClasses) { try { for (Field field : Class.forName(className.trim()).getDeclaredFields()) { if (Modifier.isPublic(field.getModifiers()) && field.isSynthetic() == false) { list.add((String) field.get(null)); } } } catch (Exception ex) { s_logger.info("Could not read in value requirement names: " + ex.getMessage()); } } Collections.sort(list, String.CASE_INSENSITIVE_ORDER); _valueRequirementNames = new LinkedHashSet<String>(list); } //------------------------------------------------------------------------- @GET @Produces(MediaType.APPLICATION_JSON) public String getJSON() { String result = null; try { result = new JSONStringer() .object() .key("types") .value(new JSONArray(_valueRequirementNames)) .endObject() .toString(); } catch (JSONException ex) { s_logger.warn("error creating json document for valueRequirementNames"); } return result; } }