diff --git a/src/main/java/org/ntlab/acanthus_server/entities/EditorJson.java b/src/main/java/org/ntlab/acanthus_server/entities/EditorJson.java index b218367..73f2508 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/EditorJson.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/EditorJson.java @@ -4,21 +4,20 @@ import java.util.Collection; public class EditorJson { - private ArrayList uid = new ArrayList<>(); + private ArrayList uid = new ArrayList<>(); //editorsをレスポンスとして返す public EditorJson(Collection editorList){ for (var editor : editorList){ - String strUid = "/Editor/" + editor.getEditor().getUid(); - uid.add(strUid); + uid.add(editor.getUid()); } } - public Collection getUid() { + public Collection getUid() { return uid; } - public void setAid(ArrayList uid) { + public void setAid(ArrayList uid) { this.uid = uid; } } diff --git a/src/main/java/org/ntlab/acanthus_server/entities/FollowJson.java b/src/main/java/org/ntlab/acanthus_server/entities/FollowJson.java new file mode 100644 index 0000000..a29b209 --- /dev/null +++ b/src/main/java/org/ntlab/acanthus_server/entities/FollowJson.java @@ -0,0 +1,37 @@ +package org.ntlab.acanthus_server.entities; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.HashMap; + +public class FollowJson { + @JsonProperty("followUids") + private ArrayList followUids = new ArrayList<>(); + @JsonProperty("followNames") + private ArrayList followNames = new ArrayList<>(); + + //Json型でフォローしているユーザーIDを表示する処理 + public FollowJson(HashMap followsHashMap){ + for (var follow : followsHashMap.values()){ + followUids.add(follow.getUid()); + followNames.add(follow.getName()); + } + } + + public ArrayList getFollowUids() { + return followUids; + } + + public ArrayList getFollowNames() { + return followNames; + } + + public void setFollowUids(ArrayList followUids) { + this.followUids = followUids; + } + + public void setFollowNames(ArrayList followNames) { + this.followNames = followNames; + } +} diff --git a/src/main/java/org/ntlab/acanthus_server/entities/FollowUidJson.java b/src/main/java/org/ntlab/acanthus_server/entities/FollowUidJson.java deleted file mode 100644 index 1440ce6..0000000 --- a/src/main/java/org/ntlab/acanthus_server/entities/FollowUidJson.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.ntlab.acanthus_server.entities; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.ArrayList; -import java.util.Collection; - -public class FollowUidJson { - @JsonProperty("followsUid") - private ArrayList followsUid = new ArrayList<>(); - - //Json型でフォローしているユーザーIDを表示する処理 - public FollowUidJson(Collection followUidList){ - for (var followUid : followUidList){ - followsUid.add(followUid); - } - } - - public Collection getFollowsUid() { - return followsUid; - } - - public void setFollowsUid(ArrayList followsUid) { - this.followsUid = followsUid; - } - -} diff --git a/src/main/java/org/ntlab/acanthus_server/entities/FollowerJson.java b/src/main/java/org/ntlab/acanthus_server/entities/FollowerJson.java new file mode 100644 index 0000000..678a3cc --- /dev/null +++ b/src/main/java/org/ntlab/acanthus_server/entities/FollowerJson.java @@ -0,0 +1,37 @@ +package org.ntlab.acanthus_server.entities; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.HashMap; + +public class FollowerJson { + @JsonProperty("followerUids") + private ArrayList followerUids = new ArrayList<>(); + @JsonProperty("followerNames") + private ArrayList followerNames = new ArrayList<>(); + + //Json型でフォロワーのユーザーIDを表示する処理 + public FollowerJson(HashMap followersHashMap){ + for (var follower : followersHashMap.values()){ + followerUids.add(follower.getUid()); + followerNames.add(follower.getName()); + } + } + + public ArrayList getFollowerUids() { + return followerUids; + } + + public ArrayList getFollowerNames() { + return followerNames; + } + + public void setFollowerUids(ArrayList followerUids) { + this.followerUids = followerUids; + } + + public void setFollowerNames(ArrayList followerNames) { + this.followerNames = followerNames; + } +} diff --git a/src/main/java/org/ntlab/acanthus_server/entities/FollowerUidJson.java b/src/main/java/org/ntlab/acanthus_server/entities/FollowerUidJson.java deleted file mode 100644 index fe7cc33..0000000 --- a/src/main/java/org/ntlab/acanthus_server/entities/FollowerUidJson.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.ntlab.acanthus_server.entities; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.ArrayList; -import java.util.Collection; - -public class FollowerUidJson { - @JsonProperty("followersUid") - private ArrayList followersUid = new ArrayList<>(); - - //Json型でフォロワーのユーザーIDを表示する処理 - public FollowerUidJson(Collection followUidList){ - for (var followerUid : followUidList){ - followersUid.add(followerUid); - } - } - - public Collection getFollowersUid() { - return followersUid; - } - - public void setFollowersUid(ArrayList followersUid) { - this.followersUid = followersUid; - } -} diff --git a/src/main/java/org/ntlab/acanthus_server/entities/InvitesJson.java b/src/main/java/org/ntlab/acanthus_server/entities/InvitesJson.java index 6c5a072..8732c9b 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/InvitesJson.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/InvitesJson.java @@ -16,7 +16,7 @@ } } - public Collection getInvitesJson() { + public ArrayList getInvitesJson() { return invites; } diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Stroke.java b/src/main/java/org/ntlab/acanthus_server/entities/Stroke.java index 6e1fecf..27a0edd 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Stroke.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Stroke.java @@ -25,9 +25,15 @@ return this.thickness; } - //座標のリストを返す - public SortedSet getPositions() { - return this.positions; + //座標のリストを返す// + public List getPositions() { + + List positions = new ArrayList(); + for (Position p: this.positions) { + positions.add(p); + } + + return positions; } // StrokesRestからstrokesのsizeをもらってstrokeNoに入れる diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowersRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowersRest.java index 3cbe5f8..50272f2 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowersRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowersRest.java @@ -1,13 +1,14 @@ package org.ntlab.acanthus_server.resources.accounts; -import org.ntlab.acanthus_server.entities.FollowerUidJson; +import org.ntlab.acanthus_server.entities.Account; +import org.ntlab.acanthus_server.entities.FollowerJson; import org.ntlab.acanthus_server.models.Accounts; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.Collection; +import java.util.HashMap; @Component @Path("/accounts") @@ -19,13 +20,13 @@ @Path("/{uid}/followers") @GET @Produces(MediaType.APPLICATION_JSON) - public FollowerUidJson getFollowers(@PathParam("uid") Integer uid){ + public FollowerJson getFollowers(@PathParam("uid") Integer uid){ var account = accounts.getAccountByUid(uid);//ユーザー情報の取得 if (account != null){ - Collection followersUidList = account.getFollowersHashMap().keySet(); + HashMap followersHashMap = account.getFollowersHashMap(); - return new FollowerUidJson(followersUidList); + return new FollowerJson(followersHashMap); }else { var response = Response.status(401).entity("ユーザーIDが間違っています"); throw new WebApplicationException(response.build()); diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowsRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowsRest.java index a33b961..552ecba 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowsRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/FollowsRest.java @@ -7,7 +7,7 @@ import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.Collection; +import java.util.HashMap; @Component @Path("/accounts") @@ -19,13 +19,13 @@ @Path("/{uid}/follows") @GET @Produces(MediaType.APPLICATION_JSON) - public FollowUidJson getFollows(@PathParam("uid") Integer uid){ + public FollowJson getFollows(@PathParam("uid") Integer uid){ var account = accounts.getAccountByUid(uid);//ユーザー情報取得 if (account != null) {//アカウント認証 - Collection followUidList = account.getFollowsHashMap().keySet(); + HashMap followsHashMap = account.getFollowsHashMap(); - return new FollowUidJson(followUidList); + return new FollowJson(followsHashMap); }else { var response = Response.status(401).entity("ユーザーIDが間違っています"); throw new WebApplicationException(response.build()); @@ -72,7 +72,7 @@ @Path("/{uid}/follows") @DELETE @Produces(MediaType.APPLICATION_JSON) - public void releaseFollows(@PathParam("uid") Integer uid, @FormParam("token") String token, @FormParam("followUid") Integer followUid){ + public String releaseFollows(@PathParam("uid") Integer uid, @QueryParam("token") String token, @QueryParam("followUid") Integer followUid){ var account = accounts.getAccountByUid(uid); var followAccount = account.getFollowsHashMap().get(followUid);//フォロー内アカウント参照 @@ -81,7 +81,7 @@ account.getFollowsHashMap().remove(followUid); followAccount.getFollowersHashMap().remove(uid); - //return "フォローを解除しました"; + return "フォローを解除しました"; }else { var response = Response.status(401).entity("フォローしているユーザーでないかユーザーIDが間違っています"); 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 52a8e4d..c426591 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 @@ -1,24 +1,36 @@ package org.ntlab.acanthus_server.resources.gallery; import org.ntlab.acanthus_server.entities.*; +import org.ntlab.acanthus_server.entities.Stroke; import org.ntlab.acanthus_server.models.Gallery; +import org.ntlab.acanthus_server.utils.Base64Decode; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.SortedSet; +import java.io.IOException; +import java.util.*; // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // @Component @Path("/gallery") -public class StrokesRest { +public class StrokesRest implements ApplicationContextAware { private final Gallery gallery = Gallery.getInstance(); - private int srstrokeSize=0; - private int srstrokeNo=0; + private int srstrokeSize = 0; + private int srstrokeNo = 0; + + private ApplicationContext applicationContext; + + + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 1ページの1レイヤーに置ける筆跡情報を全て取得します // 成功時のレスポンス:strokeNo{pen, color, thickness, potions{x, y}} @@ -55,8 +67,8 @@ @POST @Produces(MediaType.APPLICATION_JSON) 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) { + @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).getPages(); var strokes = new ArrayList(); @@ -77,14 +89,50 @@ return "OK!"; } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // 画像URLを返す - @Path("/{aid}/pageMap/{pid}/image") + // @PathParam Integer aid 作品のID + @Path("/{aid}/images") @GET @Produces(MediaType.APPLICATION_JSON) - public String getLayers(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid) { - return "http://nitta-lab-www.is.konan-u.ac.jp/gallery/" + aid + "/" + pid + "/a" + aid + "p" + pid + ".png"; + public HashMap getPageUrls(@PathParam("aid") Integer aid) { + Animation animation = gallery.getAnimationByAid(aid); + ArrayList pages = animation.getPages(); + HashMap pageUrl = new HashMap<>(); + + for (Page p : pages) { + String url = "http://nitta-lab-www.is.konan-u.ac.jp/gallery/" + aid + "/" + p.getPageNo() + "/a" + aid + "p" + p.getPageNo() + ".png"; + pageUrl.put(p.getPageNo(), url); + } + + return pageUrl; } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ + // スクショで撮った画像をサーバ内の指定フォルダーにおく + // @PathParam Integer aid 作品のID + // @PathParam Integer pid ページのID + // @FormParam String image Base64 + @Path("/{aid}/pageMap/{pid}/image") + @POST + @Produces(MediaType.APPLICATION_JSON) + public String addImage(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @FormParam("image") String image) { + + String path1 = ""; + try { + path1 = applicationContext.getResource("file:").getFile().getAbsolutePath() + "/webapps"; + Base64Decode.saveAsFile(aid, pid, path1, image); + + } catch (IOException e) { + e.printStackTrace(); + throw new WebApplicationException(500); + } + return path1; + } + + // _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ // レイヤーごとのstrokeをすべて消去 // @PathParam Integer aid 作品のID @@ -149,7 +197,7 @@ @Path("/{aid}/pageMap/{pid}/layers/{layerNo}/strokes/{strokeNo}/positions") @GET @Produces(MediaType.APPLICATION_JSON) - public SortedSet getPositions(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, + public List getPositions(@PathParam("aid") Integer aid, @PathParam("pid") Integer pid, @PathParam("layerNo") Integer layerNo, @PathParam("strokeNo") Integer strokeNo) { var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = new ArrayList(); @@ -187,7 +235,7 @@ @POST @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) { + @PathParam("layerNo") Integer layerNo, @FormParam("x") Float x, @FormParam("y") Float y) { var pages = gallery.getAnimationByAid(aid).getPages(); var strokes = new ArrayList(); @@ -198,19 +246,18 @@ var position = new Position(); position.setXY(positionNo, x, y); - if(srstrokeNo==strokeNo){ + if (srstrokeNo == strokeNo) { strokes.get(srstrokeSize).addPosition(position); - }else { - for(int i = 0; i < strokes.size(); i++){ - if(strokes.get(i).getStrokeNo()==strokeNo) - { - srstrokeNo=strokes.get(i).getStrokeNo(); - srstrokeSize=i; + } else { + for (int i = 0; i < strokes.size(); i++) { + if (strokes.get(i).getStrokeNo() == strokeNo) { + srstrokeNo = strokes.get(i).getStrokeNo(); + srstrokeSize = i; strokes.get(i).addPosition(position); } } } - // strokes.get(strokeNo).addPosition(position); // 呼び出したstrokesに座標を追加する + // strokes.get(strokeNo).addPosition(position); // 呼び出したstrokesに座標を追加する // if(animation != null) { ////// this.Position.setXY(x, y); ////// this.positions.add(this.Position); diff --git a/src/main/java/org/ntlab/acanthus_server/utils/Base64Decode.java b/src/main/java/org/ntlab/acanthus_server/utils/Base64Decode.java new file mode 100644 index 0000000..86a05a8 --- /dev/null +++ b/src/main/java/org/ntlab/acanthus_server/utils/Base64Decode.java @@ -0,0 +1,40 @@ +package org.ntlab.acanthus_server.utils; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Base64; + +public class Base64Decode { + public static void saveAsFile(Integer aid ,Integer pid ,String path1 ,String enimage) throws IOException { + + //デコードを行う + byte[] dedata = Base64.getDecoder().decode(enimage); + + //ファイルがないときは作成する + String fileName = "a" + aid.toString() + "p" + pid.toString() + ".png"; + String path2 = "/gallery/"+ aid.toString() + "/"+ pid.toString(); + String path = path1 + path2 + "/" + fileName; + + System.out.println(path.toString()); + + File file = new File(path); + System.out.println("1" + path.toString()); + file.getParentFile().mkdirs(); + System.out.println("2"+ path.toString()); + file.createNewFile(); + System.out.println("3" + path.toString()); + + //ファイルに画像データを書き込む +// FileOutputStream file1 = new FileOutputStream(file, false); +// BufferedOutputStream bf = new BufferedOutputStream(file1); +// bf.write(dedata, 0, dedata.length); + + //ファイルを閉じる +// bf.close(); + +// //セーブしたファイルの相対パスを文字列として返す +// return path2; + } +}