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 070c0b1..42f0cd6 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Animation.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Animation.java @@ -62,8 +62,7 @@ this.isPublic = false; this.owner = owner; this.editors.add(new Editor(owner, true)); - this.pageMap.put(0, new Page()); - this.pages.add(this.pageMap.get(0)); + this.pageMap.put(0, new Page(1)); this.lastUpdate = date.format(dateTimeFormatter); } @@ -74,13 +73,6 @@ //private Gallery gallery = Gallery.getInstance(); //private Accounts accounts = Accounts.getInstance(); - // page情報 - private ArrayList pages = new ArrayList<>(); - - public ArrayList getPages() { - return (this.pages); - } - //----------------------------------------------------------------- // setter @@ -159,6 +151,10 @@ return lastUpdate; } + public HashMap getPageMap() { + return pageMap; + } + //----------------------------------------------------------------- // remover @@ -221,7 +217,7 @@ this.isPublic = false; this.owner = ownerAccount; this.editors.add(new Editor(owner, true)); - this.pageMap.put(0, new Page()); + this.pageMap.put(0, new Page(1)); LocalDateTime date = LocalDateTime.now(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); @@ -231,9 +227,6 @@ //this.lastAccess = LocalDateTime.of(2015, 12, 15, 0, 0); - // pageとlayerを1枚ずつ追加 - this.pages.add(this.pageMap.get(0)); - var newWork = new Work(); //ユーザーの制作作品の作成 newWork.setWork(); 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 cebe61b..45e276f 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Page.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Page.java @@ -3,18 +3,36 @@ import java.util.ArrayList; public class Page { + private Integer pageNo; private ArrayList layers = new ArrayList<>(); - public Page() { + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + public Page(Integer pageNo) { var maxLayer = 4; for (int i = 0; i < maxLayer; i++) this.layers.add(new Layer()); + this.pageNo = pageNo; } + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + // getter public ArrayList getLayers() { return this.layers; } + public Integer getPageNo() { + return pageNo; + } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + // setter public void setLayers(ArrayList layers) { this.layers = layers; } + + public void setPageNo(Integer pageNo) { + this.pageNo = pageNo; + } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ } diff --git a/src/main/java/org/ntlab/acanthus_server/models/Gallery.java b/src/main/java/org/ntlab/acanthus_server/models/Gallery.java index ef99fa0..0f73498 100644 --- a/src/main/java/org/ntlab/acanthus_server/models/Gallery.java +++ b/src/main/java/org/ntlab/acanthus_server/models/Gallery.java @@ -58,7 +58,6 @@ - //----------------------------------------------------------------- // 作品を作る 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 88b550c..d6d451e 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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); 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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); 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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); 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 96ee38c..567ee6e 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 @@ -1,17 +1,15 @@ package org.ntlab.acanthus_server.resources.gallery; -import org.ntlab.acanthus_server.entities.Account; -import org.ntlab.acanthus_server.entities.Animation; import org.ntlab.acanthus_server.entities.Page; -import org.ntlab.acanthus_server.models.Accounts; import org.ntlab.acanthus_server.models.Gallery; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import java.util.ArrayList; +import java.util.Collection; import java.util.Random; -import java.util.UUID; // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // @@ -29,8 +27,8 @@ @Path("/{aid}/pageMap/") @GET @Produces(MediaType.APPLICATION_JSON) - public ArrayList getPages(@PathParam("aid") Integer aid) { - var pages = gallery.getAnimationByAid(aid).getPages(); + public Collection getPages(@PathParam("aid") Integer aid) { + var pages = gallery.getAnimationByAid(aid).getPageMap().values(); return pages; } @@ -44,12 +42,56 @@ @Produces(MediaType.APPLICATION_JSON) public Integer addPage(@PathParam("aid") Integer aid) { var animation = gallery.getAnimationByAid(aid); - var newPage = new Page(); + var maxSize = 999; - animation.getPages().add(newPage); - animation.setPageMap(new Random().nextInt(), newPage); + //最大値以上はページを追加させない + if (animation.getPageMap().size() < maxSize) { + var newPage = new Page(animation.getPageMap().size() + 1); + animation.setPageMap(new Random().nextInt(), newPage); + } - return animation.getPages().size(); + return animation.getPageMap().size(); } + + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + @Path("/{aid}/pageMap/size/") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Integer getPageSize(@PathParam("aid") Integer aid) { + var animation = gallery.getAnimationByAid(aid); + + return animation.getPageMap().size(); + } + + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + @Path("/{aid}/pageMap/{pid}") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + public void deletePage(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid) { + var pages = gallery.getAnimationByAid(aid).getPageMap(); + var response = Response.status(Response.Status.NO_CONTENT); + + if (pages.size() <= 1) { + response = Response.status(404).entity("これ以上ページを削除できません。"); + throw new WebApplicationException(response.build()); + } + + var removedPageNo = pages.get(pid).getPageNo().intValue(); + pages.remove(pid); + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + // 削除してページ番号をソートしなおす + + for (var page : pages.values()) { + var pageNo = page.getPageNo(); + if (removedPageNo < pageNo) page.setPageNo(pageNo - 1); + } + + response = Response.status(200).entity("ページを削除しました。"); + throw new WebApplicationException(response.build()); + } + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ } 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 f27d813..b756bf2 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 @@ -28,7 +28,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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); return pages.get(pid).getLayers().get(layerNo).getStrokes(); } @@ -50,7 +50,7 @@ public Integer addStrokes(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @FormParam("uid") Integer uid, @FormParam("uidToken") String uidToken, @FormParam("pen") Integer pen, @FormParam("color") Integer color, @FormParam("thick") Integer thick) { - var pages = gallery.getAnimationByAid(aid).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); Stroke stroke = new Stroke(); @@ -84,7 +84,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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); strokes.clear(); @@ -109,7 +109,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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); strokes.remove((int) strokeNo); @@ -133,7 +133,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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes(); /* Collections.sort(strokes.get(strokeNo).getPositions(), new Comparator() { @@ -166,7 +166,7 @@ @Produces(MediaType.APPLICATION_JSON) public Integer 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).getPages(); + var pages = gallery.getAnimationByAid(aid).getPageMap(); var strokes = pages.get(pid).getLayers().get(layerNo).getStrokes();