diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Animation.java b/src/main/java/org/ntlab/acanthus_server/entities/Animation.java index 42f0cd6..109b7d4 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Animation.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Animation.java @@ -12,6 +12,7 @@ import org.ntlab.acanthus_server.entities.Position; import org.ntlab.acanthus_server.entities.Stroke; +import java.lang.reflect.Array; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -38,7 +39,7 @@ @JsonProperty("hashTag") private ArrayList hashTag = new ArrayList<>(); @JsonProperty("pageMap") - private HashMap pageMap = new HashMap<>(); + private ArrayList pageMap = new ArrayList<>(); @JsonIgnore private Account owner; @JsonIgnore @@ -62,7 +63,7 @@ this.isPublic = false; this.owner = owner; this.editors.add(new Editor(owner, true)); - this.pageMap.put(0, new Page(1)); + this.pageMap.add(new Page(0, 1)); this.lastUpdate = date.format(dateTimeFormatter); } @@ -97,10 +98,6 @@ this.lastUpdate = dt.toString(); } - public void setPageMap(int pid, Page page) { - this.pageMap.put(pid, page); - } - //----------------------------------------------------------------- // add @@ -151,8 +148,8 @@ return lastUpdate; } - public HashMap getPageMap() { - return pageMap; + public ArrayList getPages() { + return this.pageMap; } //----------------------------------------------------------------- @@ -217,7 +214,7 @@ this.isPublic = false; this.owner = ownerAccount; this.editors.add(new Editor(owner, true)); - this.pageMap.put(0, new Page(1)); + this.pageMap.add(new Page(0, 1)); LocalDateTime date = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Page.java b/src/main/java/org/ntlab/acanthus_server/entities/Page.java index 45e276f..4c3869f 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Page.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Page.java @@ -1,16 +1,23 @@ package org.ntlab.acanthus_server.entities; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.ArrayList; public class Page { + @JsonProperty("pid") + private Integer pid; + @JsonProperty("pageNo") private Integer pageNo; + @JsonProperty("layers") private ArrayList layers = new ArrayList<>(); // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ - public Page(Integer pageNo) { + public Page(Integer pid, Integer pageNo) { var maxLayer = 4; for (int i = 0; i < maxLayer; i++) this.layers.add(new Layer()); + this.pid = pid; this.pageNo = pageNo; } @@ -24,6 +31,10 @@ return pageNo; } + public Integer getPid() { + return pid; + } + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // setter public void setLayers(ArrayList layers) { diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java index d6d451e..88b550c 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/LayersRest.java @@ -26,7 +26,7 @@ @GET @Produces(MediaType.APPLICATION_JSON) public Integer getLayers(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); return pages.get(pid).getLayers().size(); } @@ -40,7 +40,7 @@ @POST @Produces(MediaType.APPLICATION_JSON) public Integer addLayer(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); if (pages.get(pid).getLayers().size() < 4) { pages.get(pid).getLayers().add(new Layer()); @@ -60,7 +60,7 @@ @GET @Produces(MediaType.APPLICATION_JSON) public Integer getStrokeNo(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); if (strokes == null) return null; diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/PagesRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/PagesRest.java index e415b33..bfdeec8 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/PagesRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/PagesRest.java @@ -28,7 +28,7 @@ @GET @Produces(MediaType.APPLICATION_JSON) public Collection getPages(@PathParam("aid") Integer aid) { - var pages = gallery.getAnimationByAid(aid).getPageMap().values(); + var pages = gallery.getAnimationByAid(aid).getPages(); return pages; } @@ -45,12 +45,12 @@ var maxSize = 999; //最大値以上はページを追加させない - if (animation.getPageMap().size() < maxSize) { - var newPage = new Page(animation.getPageMap().size() + 1); - animation.setPageMap(new Random().nextInt(), newPage); + if (animation.getPages().size() < maxSize) { + var newPage = new Page(new Random().nextInt(), animation.getPages().size() + 1); + animation.getPages().add(newPage); } - return animation.getPageMap().size(); + return animation.getPages().size(); } @@ -61,16 +61,28 @@ public Integer getPageSize(@PathParam("aid") Integer aid) { var animation = gallery.getAnimationByAid(aid); - return animation.getPageMap().size(); + return animation.getPages().size(); } + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + @Path("/{aid}/pageMap/{pageNo}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Integer getPageId(@PathParam("aid") Integer aid, @PathParam("pageNo") Integer pageNo) { + var animation = gallery.getAnimationByAid(aid); + for (var page : animation.getPages()) { + if (page.getPageNo().equals(pageNo)) return page.getPid(); + } + + throw new WebApplicationException(404); + } // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ - @Path("/{aid}/pageMap/{pid}") + @Path("/{aid}/pageMap/{pageNo}") @DELETE @Produces(MediaType.APPLICATION_JSON) - public Integer deletePage(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + public Integer deletePage(@PathParam("aid") Integer aid, @PathParam("pageNo") Integer pageNo) { + var pages = gallery.getAnimationByAid(aid).getPages(); var response = Response.status(Response.Status.NO_CONTENT); if (pages.size() <= 1) { @@ -78,15 +90,15 @@ throw new WebApplicationException(response.build()); } - var removedPageNo = pages.get(pid).getPageNo().intValue(); - pages.remove(pid); + // 一致するページ番号を取得して削除 + for (int i = 0; i < pages.size(); i++) { + if (pageNo.equals(pages.get(i).getPageNo())) pages.remove(i); + } // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 削除してページ番号をソートしなおす - - for (var page : pages.values()) { - var pageNo = page.getPageNo(); - if (removedPageNo < pageNo) page.setPageNo(pageNo - 1); + for (var page : pages) { + if (pageNo < page.getPageNo()) page.setPageNo(page.getPageNo() - 1); } return pages.size(); diff --git a/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java b/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java index c198b52..a196653 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/gallery/StrokesRest.java @@ -29,7 +29,7 @@ @GET @Produces(MediaType.APPLICATION_JSON) public ArrayList getStrokes(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); return pages.get(pid).getLayers().get(layerNo).getStrokes(); } @@ -52,7 +52,7 @@ public String addStrokes(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @FormParam("uid") Integer uid, @FormParam("strokeNo") Integer strokeNo, @FormParam("uidToken") String uidToken, @FormParam("pen") Integer pen, @FormParam("color") Integer color, @FormParam("thick") Integer thick) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); Stroke stroke = new Stroke(); @@ -86,7 +86,7 @@ @DELETE @Produces(MediaType.APPLICATION_JSON) public String deleteStrokes(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @QueryParam("uid") Integer uid) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); strokes.clear(); @@ -111,7 +111,7 @@ @Produces(MediaType.APPLICATION_JSON) public String deleteStrokeByStrokeNo(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @PathParam("strokeNo") Integer strokeNo) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); strokes.remove((int) strokeNo); @@ -135,7 +135,7 @@ @Produces(MediaType.APPLICATION_JSON) public SortedSet getPositions(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @PathParam("strokeNo") Integer strokeNo) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); /* Collections.sort(strokes.get(strokeNo).getPositions(), new Comparator() { @@ -168,7 +168,7 @@ @Produces(MediaType.APPLICATION_JSON) public String addPosition(@FormParam("positionNo") Integer positionNo, @PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("strokeNo") Integer strokeNo, @PathParam("layerNo") Integer layerNo, @FormParam("x") Float x, @FormParam("y") Float y) { - var pages = gallery.getAnimationByAid(aid).getPageMap(); + var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes();