/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.analytics.blotter; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.joda.convert.StringConvert; import org.joda.convert.StringConverter; import org.json.JSONArray; import org.json.JSONObject; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.opengamma.analytics.financial.credit.DebtSeniority; import com.opengamma.analytics.financial.credit.RestructuringClause; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.financial.convention.StubType; import com.opengamma.financial.convention.businessday.BusinessDayConvention; import com.opengamma.financial.convention.businessday.BusinessDayConventionFactory; import com.opengamma.financial.convention.daycount.DayCount; import com.opengamma.financial.convention.daycount.DayCountFactory; import com.opengamma.financial.convention.frequency.Frequency; import com.opengamma.financial.convention.frequency.SimpleFrequencyFactory; import com.opengamma.financial.conversion.JodaBeanConverters; import com.opengamma.financial.security.LongShort; import com.opengamma.financial.security.option.BarrierDirection; import com.opengamma.financial.security.option.BarrierType; import com.opengamma.financial.security.option.EuropeanExerciseType; import com.opengamma.financial.security.option.ExerciseType; import com.opengamma.financial.security.option.MonitoringType; import com.opengamma.financial.security.option.SamplingFrequency; import com.opengamma.financial.security.swap.FloatingRateType; import com.opengamma.financial.security.swap.InterpolationMethod; import com.opengamma.id.ExternalScheme; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.i18n.Country; /** * */ public class BlotterLookupResource { static { // ensure the converters are loaded and registered JodaBeanConverters.getInstance(); } private final StringConvert _stringConvert; /* package */ BlotterLookupResource(StringConvert stringConvert) { ArgumentChecker.notNull(stringConvert, "stringConvert"); _stringConvert = stringConvert; } @SuppressWarnings("unchecked") private String convertToJsonArray(Class<?> type, Iterator<?> it) { StringConverter<Object> converter = (StringConverter<Object>) _stringConvert.findConverter(type); List<String> results = Lists.newArrayList(); while (it.hasNext()) { Object item = it.next(); results.add(converter.convertToString(item)); } return new JSONArray(results).toString(); } @GET @Path("frequencies") @Produces(MediaType.APPLICATION_JSON) @SuppressWarnings("deprecation") public String getFrequencies() { // deprecated method has an ordering applied return convertToJsonArray(Frequency.class, SimpleFrequencyFactory.INSTANCE.enumerateAvailableFrequencies()); } @GET @Path("exercisetypes") @Produces(MediaType.APPLICATION_JSON) public String getExerciseTypes() { ImmutableList<ExerciseType> exerciseTypes = ImmutableList.<ExerciseType>of(/*new AmericanExerciseType(), new AsianExerciseType(), new BermudanExerciseType(),*/ new EuropeanExerciseType()); return convertToJsonArray(ExerciseType.class, exerciseTypes.iterator()); } @GET @Path("daycountconventions") @Produces(MediaType.APPLICATION_JSON) public String getDayCountConventions() { return convertToJsonArray(DayCount.class, DayCountFactory.INSTANCE.instanceMap().values().iterator()); } @GET @Path("businessdayconventions") @Produces(MediaType.APPLICATION_JSON) public String getBusinessDayConventions() { return convertToJsonArray(BusinessDayConvention.class, BusinessDayConventionFactory.INSTANCE.instanceMap().values().iterator()); } @GET @Path("barriertypes") @Produces(MediaType.APPLICATION_JSON) public String getBarrierTypes() { return convertToJsonArray(BarrierType.class, Arrays.asList(BarrierType.values()).iterator()); } @GET @Path("barrierdirections") @Produces(MediaType.APPLICATION_JSON) public String getBarrierDirections() { return convertToJsonArray(BarrierDirection.class, Arrays.asList(BarrierDirection.values()).iterator()); } @GET @Path("debtseniority") @Produces(MediaType.APPLICATION_JSON) public String getDebtSeniority() { return convertToJsonArray(DebtSeniority.class, Arrays.asList(DebtSeniority.values()).iterator()); } @GET @Path("restructuringclause") @Produces(MediaType.APPLICATION_JSON) public String getRestructuringClause() { return convertToJsonArray(RestructuringClause.class, Arrays.asList(RestructuringClause.values()).iterator()); } @GET @Path("stubtype") @Produces(MediaType.APPLICATION_JSON) public String getStubType() { return convertToJsonArray(StubType.class, Arrays.asList(StubType.values()).iterator()); } @GET @Path("samplingfrequencies") @Produces(MediaType.APPLICATION_JSON) public String getSamplingFrequencies() { return convertToJsonArray(SamplingFrequency.class, Arrays.asList(SamplingFrequency.values()).iterator()); } @GET @Path("floatingratetypes") @Produces(MediaType.APPLICATION_JSON) public String getFloatingRateTypes() { return convertToJsonArray(FloatingRateType.class, Arrays.asList(FloatingRateType.values()).iterator()); } @GET @Path("longshort") @Produces(MediaType.APPLICATION_JSON) public String getLongShort() { return convertToJsonArray(LongShort.class, Arrays.asList(LongShort.values()).iterator()); } @GET @Path("monitoringtype") @Produces(MediaType.APPLICATION_JSON) public String getMonitoringType() { return convertToJsonArray(MonitoringType.class, Arrays.asList(MonitoringType.values()).iterator()); } @GET @Path("interpolationmethods") @Produces(MediaType.APPLICATION_JSON) public String getInterpolationMethods() { return convertToJsonArray(InterpolationMethod.class, Arrays.asList(InterpolationMethod.values()).iterator()); } @GET @Path("idschemes") @Produces(MediaType.APPLICATION_JSON) @SuppressWarnings("deprecation") public String getIdSchemes() { Map<String, ExternalScheme> schemes = Maps.newHashMap(); schemes.put("ISIN", ExternalSchemes.ISIN); schemes.put("CUSIP", ExternalSchemes.CUSIP); schemes.put("SEDOL1", ExternalSchemes.SEDOL1); schemes.put("Bloomberg BUID", ExternalSchemes.BLOOMBERG_BUID); schemes.put("Bloomberg BUID (weak)", ExternalSchemes.BLOOMBERG_BUID_WEAK); schemes.put("Bloomberg Ticker", ExternalSchemes.BLOOMBERG_TICKER); schemes.put("Bloomberg Ticker (weak)", ExternalSchemes.BLOOMBERG_TICKER_WEAK); schemes.put("Bloomberg Ticker/Coupon/Maturity", ExternalSchemes.BLOOMBERG_TCM); schemes.put("Reuters RIC", ExternalSchemes.RIC); schemes.put("ActiveFeed Ticker", ExternalSchemes.ACTIVFEED_TICKER); schemes.put("Tullett Prebon SURF", ExternalSchemes.SURF); schemes.put("ICAP", ExternalSchemes.ICAP); schemes.put("GMI", ExternalSchemes.GMI); schemes.put("Markit RED Code", ExternalSchemes.MARKIT_RED_CODE); return new JSONObject(schemes).toString(); } @GET @Path("regions") @Produces(MediaType.APPLICATION_JSON) public String getRegions() { List<Country> countryList = Lists.newArrayList(Country.getAvailableCountries()); Collections.sort(countryList); return convertToJsonArray(Country.class, countryList.iterator()); } }