package org.fluxtream.core.api; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.converter.ModelConverters; import com.wordnik.swagger.model.Model; import org.fluxtream.core.connectors.Connector; import org.fluxtream.core.connectors.ObjectType; import org.fluxtream.core.domain.AbstractFacet; import org.fluxtream.core.mvc.models.ClassModel; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import scala.collection.Iterator; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.TreeSet; @Path("/v1/datamodel") @Component("RESTDataModelStore") @Api(value = "/datamodel", description = "Get Data Model") @Scope("request") public class DataModelStore { @GET @Path("/get") @Produces({MediaType.APPLICATION_JSON}) public Response test(@QueryParam("class") String className){ try{ if (className == null) throw new ClassNotFoundException(); List<ClassModel> list = new ArrayList<ClassModel>(); Iterator<Model> i = ModelConverters.readAll(Class.forName(className)).iterator(); while (i.hasNext()) list.add(new ClassModel(i.next())); return Response.ok(list).build(); } catch (ClassNotFoundException e) { return Response.status(400).entity("Could not find " + className).build(); } catch (Exception e){ return Response.status(500).entity("An error occurred: " + e.getMessage()).build(); } } @GET @Path("/facetVos") @Produces({MediaType.APPLICATION_JSON}) public Response getAllFacetClasses(){ TreeSet<Connector> sortedConnectors = new TreeSet<Connector>(new Comparator<Connector>() { @Override public int compare(Connector connector, Connector connector2) { return connector.getName().compareTo(connector2.getName()); } }); sortedConnectors.addAll(Connector.getAllConnectors()); List<ConnectorFacetClasses> facetVos = new ArrayList<ConnectorFacetClasses>(); for (Connector sortedConnector : sortedConnectors) { final ObjectType[] objectTypes = sortedConnector.objectTypes(); if (objectTypes!=null) { ConnectorFacetClasses cfc = new ConnectorFacetClasses(); cfc.connectorName = sortedConnector.getPrettyName(); for (ObjectType objectType : objectTypes) { final Class<? extends AbstractFacet> aClass = objectType.facetClass(); try { final String voClassName = aClass.getName() + "VO"; // if the VO class exists, add it Class.forName(voClassName); cfc.facetVos.add(voClassName); } catch (Exception e) { } } facetVos.add(cfc); } } return Response.ok().entity(facetVos).build(); } public static class ConnectorFacetClasses { public String connectorName; public List<String> facetVos = new ArrayList<String>(); } }