package org.juxtasoftware.resource; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.juxtasoftware.dao.QNameFilterDao; import org.juxtasoftware.model.QNameFilter; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.resource.Get; import org.restlet.resource.Post; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import eu.interedition.text.Name; import eu.interedition.text.NameRepository; import eu.interedition.text.mem.SimpleName; @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class QNameFiltersResource extends BaseResource { @Autowired private QNameFilterDao qnameFilterDao; @Autowired private NameRepository nameRepository; @Get("html") public Representation toHtml() { List<QNameFilter> filters = this.qnameFilterDao.list( this.workspace ); Map<String,Object> map = new HashMap<String,Object>(); map.put("items", filters); map.put("title", "Juxta QName Filters"); return toHtmlRepresentation("qname_filter_list.ftl",map,false); } @Get("json") public Representation toJson() { List<QNameFilter> filters = this.qnameFilterDao.list( this.workspace ); Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .create(); String json = gson.toJson(filters); return toJsonRepresentation(json); } @Post("json") public Representation acceptJson(final String jsonStr) { LOG.info("Create QName Filter from "+jsonStr); JsonParser parser = new JsonParser(); JsonObject jsonObj = parser.parse(jsonStr).getAsJsonObject(); QNameFilter filter = new QNameFilter(); filter.setName( jsonObj.get("name").getAsString() ); QNameFilter bogus =this.qnameFilterDao.find(this.workspace, filter.getName()); if ( bogus != null ) { setStatus(Status.CLIENT_ERROR_CONFLICT); return toTextRepresentation("Filter \""+filter.getName()+"\" already exists"); } JsonArray notes = jsonObj.get("qnames").getAsJsonArray(); for ( Iterator<JsonElement> itr = notes.iterator(); itr.hasNext(); ) { JsonObject obj = itr.next().getAsJsonObject(); SimpleName qname = new SimpleName( obj.get("namespace").getAsString(), obj.get("localName").getAsString() ); Name actualQname = this.nameRepository.get(qname); filter.getQNames().add(actualQname); } filter.setWorkspaceId( this.workspace.getId() ); Long id = this.qnameFilterDao.create(filter); return toTextRepresentation(id.toString() ); } }