/* * Copyright 2011 GigaSpaces Technologies Ltd * * 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 org.openspaces.rest.space; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletResponse; import org.openspaces.core.GigaSpace; import org.openspaces.rest.utils.ControllerUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.j_spaces.core.client.SQLQuery; /** * Spring MVC controller for the RESTful Space API (POJO READS) * */ @Controller @RequestMapping(value = "/rest/pojo/*") public class SpacePojoReadAPIController { private static final Logger log=Logger.getLogger(SpacePojoReadAPIController.class.getName()); private static final Logger logger = Logger.getLogger(SpacePojoReadAPIController.class.getName()); /** * REST ReadMultiple by query request handler - readMultiple * */ @RequestMapping(value = "/readMultiple", method = RequestMethod.GET) public ModelAndView readMultiple( @RequestParam String spaceName, @RequestParam String locators, @RequestParam String classname, @RequestParam Integer max, @RequestParam String query, HttpServletResponse response){ if(logger.isLoggable(Level.FINE)) logger.fine("creating read query with type: " + classname + " and query="+query ); Object template; try { template = Class.forName(classname).newInstance(); } catch (Exception e) { throw new RuntimeException(e); } Object[] objs=null; if(max==null)max=Integer.MAX_VALUE; GigaSpace gigaSpace=ControllerUtils.xapCache.get(spaceName,locators); if(query==null ||query.length()==0){ objs=gigaSpace.readMultiple(template,max); } else{ objs=gigaSpace.readMultiple(new SQLQuery(template.getClass(),query),max); } ModelAndView mv=new ModelAndView("jsonView"); if(objs!=null){ int i=0; for(Object obj:objs){ i++; mv.addObject(String.valueOf(i),obj); } } response.setHeader("Access-Control-Allow-Origin","*"); return mv; } /** * REST ReadById by query request handler - readMultiple * */ @RequestMapping(value = "/readById", method = RequestMethod.GET) public ModelAndView readById( @RequestParam String spaceName, @RequestParam String locators, @RequestParam String classname, @RequestParam String id, @RequestParam String idClass, @RequestParam String routing, @RequestParam String routingClass, HttpServletResponse response)throws Exception{ log.fine(String.format("readById called params: classname=%s id=%s idClass=%s routing=%s routingClass=%s", classname,id,idClass,routing,routingClass)); Class<?> _valueClass=Class.forName(classname); Class<?> _idClass=Class.forName(idClass); Class<?> _routingClass=Class.forName(routingClass); Object idobj=_idClass.getConstructor(String.class).newInstance(id); Object routingobj=_routingClass.getConstructor(String.class).newInstance(routing); GigaSpace gigaSpace=ControllerUtils.xapCache.get(spaceName,locators); log.fine(String.format("reading: gigaSpace=%s _valueClass=%s idobj=%s routingobj=%s", gigaSpace,_valueClass,idobj,routingobj)); Object obj=gigaSpace.readById(_valueClass,idobj,routingobj); ModelAndView mv=new ModelAndView("jsonView"); if(obj!=null){ mv.addObject(id,obj); } response.setHeader("Access-Control-Allow-Origin","*"); return mv; } /** * REST COUNT - Unrestricted for now * * TODO: add query body * */ @RequestMapping(value = "/count", method = RequestMethod.GET) public ModelAndView count( @RequestParam String spaceName, @RequestParam String locators, @RequestParam String classname, HttpServletResponse response){ if(logger.isLoggable(Level.FINE)) logger.fine("creating read query with type: " + classname ); Object template; try { template = Class.forName(classname).newInstance(); } catch (Exception e) { throw new RuntimeException(e); } GigaSpace gigaSpace=ControllerUtils.xapCache.get(spaceName,locators); Integer cnt=gigaSpace.count(template); ModelAndView mv=new ModelAndView("jsonView"); if(cnt!=null){ mv.addObject("count",cnt); } response.setHeader("Access-Control-Allow-Origin","*"); return mv; } }