use of gov.usgs.cida.coastalhazards.model.Item in project coastal-hazards by USGS-CIDA.
the class TreeResource method updateItemChildren.
/**
* Updates one or more items for children and displayed children
*
* @return whether items were updated in the database or not
*/
private boolean updateItemChildren(Map<String, JsonObject> items) {
List<Item> itemList = new LinkedList<>();
boolean updated = false;
for (Entry<String, JsonObject> entry : items.entrySet()) {
String itemId = entry.getKey();
JsonObject updateData = entry.getValue();
if (updateData.has("children")) {
Item parentItem;
List<Item> children;
try (ItemManager manager = new ItemManager()) {
parentItem = manager.load(itemId);
children = new LinkedList<>();
log.info("Attempting to update item {}", parentItem.getId());
// Update the item's children
Iterator<JsonElement> iterator = updateData.get("children").getAsJsonArray().iterator();
while (iterator.hasNext()) {
String childId = iterator.next().getAsString();
Item child = manager.load(childId);
children.add(child);
}
parentItem.setChildren(children);
// Update the item's displayedChildren
if (updateData.has("displayedChildren")) {
Iterator<JsonElement> displayedIterator = updateData.get("displayedChildren").getAsJsonArray().iterator();
List<String> displayedChildren = new ArrayList<>();
while (displayedIterator.hasNext()) {
String childId = displayedIterator.next().getAsString();
displayedChildren.add(childId);
}
parentItem.setDisplayedChildren(displayedChildren);
}
}
itemList.add(parentItem);
} else {
log.error("Incoming JSON Object {} has no children");
throw new BadRequestException();
}
}
// in the database
if (!itemList.isEmpty()) {
// Update the children
try (ItemManager manager = new ItemManager()) {
updated = manager.mergeAll(itemList);
}
if (updated) {
log.info("Updated {} items", itemList.size());
// Update the thumbnails
try (ThumbnailManager thumbMan = new ThumbnailManager()) {
for (Item item : itemList) {
thumbMan.updateDirtyBits(item.getId());
}
log.debug("Updated thumbs for {} items", itemList.size());
}
// Update the status manager
try (StatusManager statusMan = new StatusManager()) {
Status status = new Status();
status.setStatusName(Status.StatusName.STRUCTURE_UPDATE);
if (statusMan.save(status)) {
log.debug("Status Manager updated structure status after items were updated.");
} else {
log.warn("Status Manager did not update the structure status after updating items. This could lead to inconsistencies in the data");
}
} catch (Exception e) {
log.error(e.toString());
}
} else {
log.warn("Could not update {} items.", itemList.size());
}
}
return updated;
}
use of gov.usgs.cida.coastalhazards.model.Item in project coastal-hazards by USGS-CIDA.
the class TreeResource method getRootTrees.
@GET
@Path("/item")
@Produces(MediaType.APPLICATION_JSON)
public Response getRootTrees(@Context Request request) {
Response response = null;
try (ItemManager itemManager = new ItemManager()) {
List<Item> items = itemManager.loadRootItems();
Gson treeGson = new GsonBuilder().registerTypeAdapter(Item.class, new ItemTreeAdapter()).create();
JsonObject root = new JsonObject();
JsonArray rootItems = new JsonArray();
for (Item item : items) {
rootItems.add(treeGson.toJsonTree(item));
}
root.add("items", rootItems);
response = Response.ok(root.toString(), MediaType.APPLICATION_JSON_TYPE).build();
} catch (Exception e) {
log.error(e.toString());
}
return response;
}
use of gov.usgs.cida.coastalhazards.model.Item in project coastal-hazards by USGS-CIDA.
the class ItemResource method postItem.
/**
* Only allows one card to be posted at a time for now
*
* @param content Posted content as text string (should be JSON)
* @param request passed through context of request
* @return
*/
@RolesAllowed({ CoastalHazardsTokenBasedSecurityFilter.CCH_ADMIN_ROLE })
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response postItem(String content, @Context HttpServletRequest request) {
Response response;
Item item = Item.fromJSON(content);
final String id;
try (ItemManager itemManager = new ItemManager()) {
id = itemManager.persist(item);
}
if (null == id) {
throw new BadRequestException();
} else {
Map<String, Object> ok = new HashMap<String, Object>() {
private static final long serialVersionUID = 2398472L;
{
put("id", id);
}
};
response = Response.ok(GsonUtil.getDefault().toJson(ok, HashMap.class), MediaType.APPLICATION_JSON_TYPE).build();
}
try (StatusManager statusMan = new StatusManager();
ThumbnailManager thumbMan = new ThumbnailManager()) {
Status status = new Status();
status.setStatusName(Status.StatusName.ITEM_UPDATE);
statusMan.save(status);
thumbMan.updateDirtyBits(id);
}
return response;
}
use of gov.usgs.cida.coastalhazards.model.Item in project coastal-hazards by USGS-CIDA.
the class MetadataResource method getMetadataSummaryByAttribtueUsingItemID.
@GET
@Path("/summarize/itemid/{itemid}/attribute/{attr}")
@Produces(MediaType.APPLICATION_JSON)
public Response getMetadataSummaryByAttribtueUsingItemID(@PathParam("itemid") String itemId, @PathParam("attr") String attr) throws URISyntaxException {
Response response;
try (ItemManager itemManager = new ItemManager()) {
Item item = itemManager.load(itemId);
String jsonSummary = MetadataUtil.getSummaryFromWPS(getMetadataUrl(item), attr);
Summary summary = GsonUtil.getDefault().fromJson(jsonSummary, Summary.class);
response = Response.ok(GsonUtil.getDefault().toJson(summary, Summary.class), MediaType.APPLICATION_JSON_TYPE).build();
} catch (IOException | ParserConfigurationException | SAXException | JsonSyntaxException ex) {
Map<String, String> err = new HashMap<>();
err.put("message", ex.getMessage());
response = Response.serverError().entity(GsonUtil.getDefault().toJson(err, HashMap.class)).build();
}
return response;
}
use of gov.usgs.cida.coastalhazards.model.Item in project coastal-hazards by USGS-CIDA.
the class QRCodeResource method generateQRImageUsingItemID.
/**
* Produces a QR code that directs to back of card for a given item ID
*
* @param id
* @param width
* @param height
* @return
*/
@GET
@Path("/info/item/{id}")
@Produces("image/png")
public Response generateQRImageUsingItemID(@PathParam("id") String id, @QueryParam("width") int width, @QueryParam("height") int height) throws IOException {
URL url = null;
String urlString = "ui/info/item/" + id;
Response response;
QRCodeGenerator qrcr = new QRCodeGenerator();
// Make sure the item exists in the database
try (ItemManager itemManager = new ItemManager()) {
Item item = itemManager.load(id);
if (item == null) {
throw new NotFoundException();
}
}
// Check if the base URL doesn't contain a trailing slash. If not, attach one to the beginning of url string
if (BASE_URL.charAt(BASE_URL.length() - 1) != '/') {
urlString = "/" + urlString;
}
// Create the URL string
urlString = BASE_URL + urlString;
try {
url = new URL(urlString);
qrcr.setUrl(url);
} catch (MalformedURLException | URISyntaxException ex) {
throw new ParamException.QueryParamException(ex, "URL could not be formed", "URL " + url + " could not be formed.");
}
if (width > 0 && height > 0) {
if (width > MAX_WIDTH) {
qrcr.setWidth(MAX_WIDTH);
} else {
qrcr.setWidth(width);
}
if (height > MAX_HEIGHT) {
qrcr.setHeight(MAX_HEIGHT);
} else {
qrcr.setHeight(height);
}
}
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
qrcr.writeToOutputStream(baos);
baos.flush();
response = Response.ok(baos.toByteArray(), "image/png").build();
}
return response;
}
Aggregations