/**
*
* Copyright (c) 2009-2016 Freedomotic team http://freedomotic.com
*
* This file is part of Freedomotic
*
* This Program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* This Program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* Freedomotic; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*/
package com.freedomotic.plugins.devices.restapiv3.resources.jersey;
import com.freedomotic.marketplace.IPluginCategory;
import com.freedomotic.marketplace.MarketPlaceService;
import com.freedomotic.plugins.devices.restapiv3.filters.ItemNotFoundException;
import com.freedomotic.plugins.devices.restapiv3.utils.AbstractReadOnlyResource;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
*
* @author Matteo Mazzoni
*/
@Api(value = "marketplaceCategory", description = "Manage marketplace plugin categories")
public class MarketplaceCategoryResource extends AbstractReadOnlyResource<IPluginCategory> {
MarketPlaceService mps = MarketPlaceService.getInstance();
ArrayList<IPluginCategory> catList;
public MarketplaceCategoryResource() {
this.catList = mps.getCategoryList();
}
public MarketplaceCategoryResource(ArrayList<IPluginCategory> clist) {
this.catList = clist;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Show the list of registered remote marketplace providers")
@Override
public Response list() {
return super.list();
}
@Override
protected List<IPluginCategory> prepareList() {
return catList;
}
@Path("/{cat}/plugins")
@ApiOperation(value = "Show the list of plugins belonging to selected category")
public MarketplacePluginsResource listPluginsFromCategory(
@ApiParam(value = "Name of plugins category to fetch", required = true)
@PathParam("cat") String cat,
@ApiParam(value = "Retrieve package list automatically, if necessary", required = false)
@QueryParam("noUpdate") boolean noUpdate) {
for (IPluginCategory category : catList) {
if (category.getName().equalsIgnoreCase(cat)) {
if (mps.getPackageList(category).isEmpty() && !noUpdate) {
category.retrievePluginsInfo();
}
return new MarketplacePluginsResource(mps.getPackageList(category));
}
}
throw new ItemNotFoundException("Cannot find desired category");
}
@GET
@ApiOperation(value = "Get a category basic data")
@Override
@Produces(MediaType.APPLICATION_JSON)
@Path("/{cat}")
public Response get(
@ApiParam(value = "Name of plugins category to fetch", required = true)
@PathParam("cat") String uuid) {
return super.get(uuid);
}
@Override
public IPluginCategory prepareSingle(String cat) {
for (IPluginCategory category : catList) {
if (category.getName().equalsIgnoreCase(cat)) {
return category;
}
}
return null;
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{id}/update")
public Response update(
@ApiParam(value = "Name of plugins category to fetch", required = true)
@PathParam("cat") String cat) {
IPluginCategory c = prepareSingle(cat);
c.retrievePluginsInfo();
return Response.accepted().build();
}
}