use of gov.usgs.cida.coastalhazards.jpa.ItemManager 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.jpa.ItemManager 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.jpa.ItemManager in project coastal-hazards by USGS-CIDA.
the class ItemResource method checkForCycle.
/**
* Run the cycle check before attempting POST or PUT to verify item would
* not introduce cycle
*
* @param parentId aggregation item to check
* @param childId child item being added to parent item
* @return JSON response with true or false
*/
@GET
@Path("/cycle/{parentId}/{childId}")
public Response checkForCycle(@PathParam("parentId") String parentId, @PathParam("childId") String childId) {
Response response = null;
try (ItemManager itemManager = new ItemManager()) {
boolean cycle = itemManager.isCycle(parentId, childId);
response = Response.ok("{\"cycle\": " + cycle + "}", MediaType.APPLICATION_JSON_TYPE).build();
}
return response;
}
use of gov.usgs.cida.coastalhazards.jpa.ItemManager 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.jpa.ItemManager 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;
}
Aggregations