/** * Search datasets containg param text in the metadata * * @param query The query object * @param limit maximum results to return * @param offset search begins from offset * @throws JackanException on error */ public synchronized SearchResults<CkanDataset> searchDatasets( CkanQuery query, int limit, int offset) { StringBuilder params = new StringBuilder(); params.append("rows=").append(limit).append("&start=").append(offset); if (query.getText().length() > 0) { params.append("&q="); params.append(urlEncode(query.getText())); } StringBuilder fq = new StringBuilder(); String fqPrefix = ""; fqPrefix = appendNamesList(fqPrefix, "groups", query.getGroupNames(), fq); fqPrefix = appendNamesList(fqPrefix, "organization", query.getOrganizationNames(), fq); fqPrefix = appendNamesList(fqPrefix, "tags", query.getTagNames(), fq); fqPrefix = appendNamesList(fqPrefix, "license_id", query.getLicenseIds(), fq); if (fq.length() > 0) { params.append("&fq=").append(urlEncode(fq.insert(0, "(").append(")").toString())); } DatasetSearchResponse dsr; dsr = getHttp(DatasetSearchResponse.class, "/api/3/action/package_search?" + params.toString()); if (dsr.success) { for (CkanDataset ds : dsr.result.getResults()) { for (CkanResource cr : ds.getResources()) { cr.setPackageId(ds.getId()); } } } return dsr.result; }
/** * @param idOrName either the dataset name (i.e. laghi-monitorati-trento) or the the * alphanumerical id (i.e. 96b8aae4e211f3e5a70cdbcbb722264256ae2e7d) * @throws JackanException on error */ public synchronized CkanDataset getDataset(String idOrName) { CkanDataset cd = getHttp(DatasetResponse.class, "/api/3/action/package_show", "id", idOrName).result; for (CkanResource cr : cd.getResources()) { cr.setPackageId(cd.getId()); } return cd; }
/** * Updates a resource on the ckan server. * * @param resource ckan resource object * @return the updated resource * @throws JackanException */ public synchronized CkanResource updateResource(CkanResource resource, Boolean checkConsistency) { if (ckanToken == null) { throw new JackanException( "Tried to update resource" + resource.getName() + ", but ckan token was not set!"); } // check consistance with original version of the to be updated resource if (checkConsistency) { CkanResource originalResource = getResource(resource.getId()); for (Field f : originalResource.getClass().getDeclaredFields()) { f.setAccessible(true); String fieldName; try { if ((f.get(originalResource) != null) && (f.get(resource) == null) && (!f.getName().equals("created"))) { fieldName = f.getName(); // if(!fieldName.equals("created")){ f.set(resource, f.get(originalResource)); System.out.println("Not a null: " + fieldName + " Value: "); // //}; // System.out.println("Not a null: "+fieldName+ " Value: "); } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // System.out.println("After consistance checking resource is consist of: // "+resource.toString()); ObjectMapper objectMapper = CkanClient.getObjectMapper(); String json = null; try { json = objectMapper.writeValueAsString(resource); } catch (IOException e) { throw new JackanException("Couldn't serialize the provided CkanResourceMinimized!", e); } return postHttp( ResourceResponse.class, "/api/3/action/resource_update", json, ContentType.APPLICATION_JSON) .result; }
/** * Creates ckan resource on the server. * * @param resource ckan resource object with the minimal set of parameters required. See {@link * CkanResource#CkanResource(java.lang.String, java.lang.String, java.lang.String, * java.lang.String, java.lang.String, java.lang.String)} * @return the newly created resource * @throws JackanException */ public synchronized CkanResource createResource(CkanResource resource) { logger.warning("TODO 0.4 CREATION OF FULL RESOURCE IS EXPERIMENTAL!"); if (ckanToken == null) { throw new JackanException( "Tried to create resource" + resource.getName() + ", but ckan token was not set!"); } ObjectMapper objMapper = CkanClient.getObjectMapper(); String json = null; try { json = objMapper.writeValueAsString(resource); } catch (IOException e) { throw new JackanException("Couldn't serialize the provided CkanResource!", e); } return postHttp( ResourceResponse.class, "/api/3/action/resource_create", json, ContentType.APPLICATION_JSON) .result; }