From e7d693f5729cf0f2a1889fe8271aa663b33708f7 Mon Sep 17 00:00:00 2001 From: Hakim Saifee Date: Sun, 13 Oct 2019 18:20:29 +0530 Subject: [PATCH] solved the problem --- .../com/machine/coding/CommandExecutor.java | 170 ++++++++++++++++++ .../src/com/machine/coding/Driver.java | 39 ++++ .../src/com/machine/coding/Formattor.java | 25 +++ .../machine/coding/common/ServiceFactory.java | 36 ++++ .../com/machine/coding/common/UserBase.java | 19 ++ .../src/com/machine/coding/model/Base.java | 22 +++ .../src/com/machine/coding/model/Board.java | 86 +++++++++ .../src/com/machine/coding/model/Card.java | 79 ++++++++ .../com/machine/coding/model/CardList.java | 88 +++++++++ .../src/com/machine/coding/model/Privacy.java | 6 + .../src/com/machine/coding/model/User.java | 68 +++++++ .../coding/repository/BoardRepository.java | 18 ++ .../coding/repository/CardListRepository.java | 18 ++ .../coding/repository/CardRepository.java | 20 +++ .../coding/repository/GenericRepository.java | 49 +++++ .../machine/coding/service/BoardService.java | 57 ++++++ .../coding/service/CardListService.java | 51 ++++++ .../machine/coding/service/CardService.java | 38 ++++ .../coding/service/GenericService.java | 45 +++++ 19 files changed, 934 insertions(+) create mode 100644 TrelloMachingCoding/src/com/machine/coding/CommandExecutor.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/Driver.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/Formattor.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/common/ServiceFactory.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/common/UserBase.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/Base.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/Board.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/Card.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/CardList.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/Privacy.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/model/User.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/repository/BoardRepository.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/repository/CardListRepository.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/repository/CardRepository.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/repository/GenericRepository.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/service/BoardService.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/service/CardListService.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/service/CardService.java create mode 100644 TrelloMachingCoding/src/com/machine/coding/service/GenericService.java diff --git a/TrelloMachingCoding/src/com/machine/coding/CommandExecutor.java b/TrelloMachingCoding/src/com/machine/coding/CommandExecutor.java new file mode 100644 index 0000000..2d7a0b6 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/CommandExecutor.java @@ -0,0 +1,170 @@ +package com.machine.coding; + +import com.machine.coding.common.ServiceFactory; +import com.machine.coding.model.Board; +import com.machine.coding.model.Card; +import com.machine.coding.model.CardList; +import com.machine.coding.service.BoardService; +import com.machine.coding.service.CardListService; +import com.machine.coding.service.CardService; + +@SuppressWarnings("unchecked") +public class CommandExecutor { + + // TODO : Change it to interface later. + private BoardService boardService = (BoardService) ServiceFactory.getService("BOARD_SERVICE"); + private CardListService cardListService = (CardListService) ServiceFactory + .getService("CARDLIST_SERVICE"); + private CardService cardService = (CardService) ServiceFactory.getService("CARD_SERVICE"); + + public void execute(String inputCommand) { + String[] commands = inputCommand.split(" "); + switch (commands[0]) { + // BOARD. + case "BOARD": + switch (commands[1]) { + case "CREATE": + boardService.create(new Board(commands[2])); + break; + + case "DELETE": + boardService.delete(commands[2], true); + break; + + default: + switch (commands[2]) { + case "ADD_MEMBER": + boardService.addMember(commands[1], commands[3]); + break; + + case "REMOVE_MEMBER": + boardService.removeMember(commands[1], commands[3]); + break; + + default: + + try { + boardService.updateField(commands[2], commands[3], commands[1]); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException + | SecurityException e) { + e.printStackTrace(); + } + + break; + } + break; + } + break; + + // List + case "LIST": + switch (commands[1]) { + case "CREATE": + CardList cardList = new CardList(commands[3]); + cardList.setBoard(boardService.getById(commands[2])); + String id = cardListService.create(cardList); + boardService.addCardList(commands[2], id); + break; + + case "DELETE": + cardListService.delete(commands[2], true); + break; + + default: + switch (commands[2]) { + + default: + + try { + cardListService.updateField(commands[2], commands[3], commands[1]); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException + | SecurityException e) { + e.printStackTrace(); + } + + break; + } + break; + } + break; + + // List + case "CARD": + switch (commands[1]) { + case "CREATE": + Card card = new Card(commands[3]); + card.setCardList(cardListService.getById(commands[2])); + String id = cardService.create(card); + cardListService.addCard(commands[2], id); + break; + + case "DELETE": + cardService.delete(commands[2]); + break; + + default: + switch (commands[2]) { + + case "ASSIGN": + cardService.assign(commands[1], commands[3]); + break; + + case "UNASSIGN": + cardService.unAssign(commands[1]); + break; + + case "MOVE": + cardListService.moveCard(commands[1], commands[3]); + break; + + default: + + try { + cardService.updateField(commands[2], commands[3], commands[1]); + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException + | SecurityException e) { + e.printStackTrace(); + } + + break; + } + break; + } + break; + + // show + case "SHOW": + String output; + if (commands.length == 1) { + output = new Formattor().format(boardService.getAll()); + System.out.println(output); + } else { + + switch (commands[1]) { + case "BOARD": + // Due to time constraint using toString format. + output = new Formattor().format(boardService.getById(commands[2])); + System.out.println(output); + break; + case "LIST": + // Due to time constraint using toString format. + output = new Formattor().format(cardListService.getById(commands[2])); + System.out.println(output); + break; + case "CARD": + // Due to time constraint using toString format. + output = new Formattor().format(cardService.getById(commands[2])); + System.out.println(output); + break; + + default: + break; + } + } + break; + + default: + break; + } + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/Driver.java b/TrelloMachingCoding/src/com/machine/coding/Driver.java new file mode 100644 index 0000000..6b544b2 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/Driver.java @@ -0,0 +1,39 @@ +package com.machine.coding; + +import java.util.Scanner; + +import com.machine.coding.common.UserBase; +import com.machine.coding.model.User; + +public class Driver { + + public static void main(String[] args) { + + CommandExecutor executor = new CommandExecutor(); + Scanner sc = new Scanner(System.in); + + createUserBase(); + + while (sc.hasNext()) { + String command = sc.nextLine(); + + executor.execute(command); + + } + } + + private static void createUserBase() { + // Creating dummy users for now , it can be created using some file or + // some other ways. + User user1 = new User("user1", "User1", "User1@gmail.com", "123"); + User user2 = new User("user2", "User2", "User2@gmail.com", "1234"); + User user3 = new User("user3", "User3", "User3@gmail.com", "1235"); + User user4 = new User("user4", "User4", "User4@gmail.com", "123455"); + UserBase.addUser(user1); + UserBase.addUser(user2); + UserBase.addUser(user3); + UserBase.addUser(user4); + + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/Formattor.java b/TrelloMachingCoding/src/com/machine/coding/Formattor.java new file mode 100644 index 0000000..f7fea1c --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/Formattor.java @@ -0,0 +1,25 @@ +package com.machine.coding; + +import java.util.List; + +public class Formattor { + + // Due to time constraint using toString format. + public String format(V object) { + if (object == null) + return "No Boards"; + return object.toString(); + } + + public String format(List objects) { + StringBuilder builder = new StringBuilder(); + if (objects == null || objects.isEmpty()) + return "No Boards"; + for (V v : objects) { + builder.append(v.toString()); + builder.append("\n"); + } + return builder.toString(); + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/common/ServiceFactory.java b/TrelloMachingCoding/src/com/machine/coding/common/ServiceFactory.java new file mode 100644 index 0000000..cae24f8 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/common/ServiceFactory.java @@ -0,0 +1,36 @@ +package com.machine.coding.common; + +import com.machine.coding.model.Board; +import com.machine.coding.model.Card; +import com.machine.coding.model.CardList; +import com.machine.coding.service.BoardService; +import com.machine.coding.service.CardListService; +import com.machine.coding.service.CardService; +import com.machine.coding.service.GenericService; + +/** + * @author Hakim.s + * + */ +public class ServiceFactory { + + private ServiceFactory() { + } + + @SuppressWarnings("rawtypes") + public static GenericService getService(String type) { + switch (type) { + case "BOARD_SERVICE": + return new BoardService(); + + case "CARDLIST_SERVICE": + return new CardListService(); + case "CARD_SERVICE": + + return new CardService(); + default: + break; + } + return null; + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/common/UserBase.java b/TrelloMachingCoding/src/com/machine/coding/common/UserBase.java new file mode 100644 index 0000000..3952b69 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/common/UserBase.java @@ -0,0 +1,19 @@ +package com.machine.coding.common; + +import java.util.HashMap; +import java.util.Map; + +import com.machine.coding.model.User; + +public class UserBase { + + static Map userMap = new HashMap(); + + public static User getUser(String userId) { + return userMap.get(userId); + } + + public static void addUser(User user) { + userMap.put(user.getUserId(), user); + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/Base.java b/TrelloMachingCoding/src/com/machine/coding/model/Base.java new file mode 100644 index 0000000..21485d3 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/Base.java @@ -0,0 +1,22 @@ +package com.machine.coding.model; + +import java.io.Serializable; + +public class Base implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/Board.java b/TrelloMachingCoding/src/com/machine/coding/model/Board.java new file mode 100644 index 0000000..7e8881f --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/Board.java @@ -0,0 +1,86 @@ +package com.machine.coding.model; + +import java.util.ArrayList; +import java.util.List; + +public class Board extends Base{ + + private String name; + private String privacy =Privacy.PUBLIC.toString(); + private String url; + private List members; + private List cardLists; + + public Board() { + this.members = new ArrayList<>(); + this.cardLists = new ArrayList<>(); + } + public Board(String name) { + this(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPrivacy() { + return privacy; + } + + public void setPrivacy(String privacy) { + this.privacy = privacy; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public List getMembers() { + return members; + } + + public void setMembers(List members) { + this.members = members; + } + + public List getCardLists() { + return cardLists; + } + + public void setCardLists(List cardLists) { + this.cardLists = cardLists; + } + + + public void addMember(User member) { + getMembers().add(member); + } + + public void removeMember(User member) { + getMembers().remove(member); + } + + public void addCardList(CardList cardList) { + getCardLists().add(cardList); + } + public void removeCardList(CardList cardList) { + getCardLists().remove(cardList); + } + + @Override + public String toString() { + return String.format("Board [id=%s, name=%s, privacy=%s, url=%s, members=%s, cardLists=%s]", getId(), name, privacy, + url, members, cardLists); + } + + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/Card.java b/TrelloMachingCoding/src/com/machine/coding/model/Card.java new file mode 100644 index 0000000..ce4ef22 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/Card.java @@ -0,0 +1,79 @@ +package com.machine.coding.model; + +public class Card extends Base { + + private String name; + private String description; + private User assignedUser; + + // Keeping reverse association + private CardList cardList; + + public Card(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public User getAssignedUser() { + return assignedUser; + } + + public void setAssignedUser(User assignedUser) { + this.assignedUser = assignedUser; + } + + public CardList getCardList() { + return cardList; + } + + public void setCardList(CardList cardList) { + this.cardList = cardList; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Card other = (Card) obj; + if (getId() == null) { + if (other.getId() != null) + return false; + } else if (!getId().equals(other.getId())) + return false; + return true; + } + + @Override + public String toString() { + return String.format("Card [id=%s, name=%s, description=%s, assignedUser=%s]", getId(), name, description, + assignedUser); + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/CardList.java b/TrelloMachingCoding/src/com/machine/coding/model/CardList.java new file mode 100644 index 0000000..6a865ed --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/CardList.java @@ -0,0 +1,88 @@ +package com.machine.coding.model; + +import java.util.ArrayList; +import java.util.List; + +public class CardList extends Base { + + + private String name; + private List cards; + + //Keeping reverse association + private Board board; + + public CardList() { + this.cards = new ArrayList<>(); + } + + public CardList(String name) { + this(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCards() { + return cards; + } + + public void setCards(List cards) { + this.cards = cards; + } + + public void addCard(Card card) { + getCards().add(card); + } + + public void removeCard(Card card) { + getCards().remove(card); + + } + + public Board getBoard() { + return board; + } + + public void setBoard(Board board) { + this.board = board; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CardList other = (CardList) obj; + if (getId() == null) { + if (other.getId() != null) + return false; + } else if (!getId().equals(other.getId())) + return false; + return true; + } + + @Override + public String toString() { + return String.format("CardList [id=%s, name=%s, cards=%s]", getId(), name, cards); + } + + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/Privacy.java b/TrelloMachingCoding/src/com/machine/coding/model/Privacy.java new file mode 100644 index 0000000..f553921 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/Privacy.java @@ -0,0 +1,6 @@ +package com.machine.coding.model; + +public enum Privacy { + + PUBLIC, PRIVATE; +} diff --git a/TrelloMachingCoding/src/com/machine/coding/model/User.java b/TrelloMachingCoding/src/com/machine/coding/model/User.java new file mode 100644 index 0000000..169e052 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/model/User.java @@ -0,0 +1,68 @@ +package com.machine.coding.model; + +public class User { + + private String userId; + private String name; + private String email; + + public User(String userId, String name, String emailId, String mobileNumber) { + this.userId = userId; + this.name = name; + this.email = emailId; + } + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + User other = (User) obj; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } + @Override + public String toString() { + return String.format("User [userId=%s, name=%s, email=%s]", userId, name, email); + } + + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/repository/BoardRepository.java b/TrelloMachingCoding/src/com/machine/coding/repository/BoardRepository.java new file mode 100644 index 0000000..14f20a7 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/repository/BoardRepository.java @@ -0,0 +1,18 @@ +package com.machine.coding.repository; + +import java.io.Serializable; + +import com.machine.coding.model.Base; + +//Making singleton repository to have single copy. +public class BoardRepository extends GenericRepository { + + private static BoardRepository repository = new BoardRepository<>(); + + private BoardRepository() { + + } + public static BoardRepository getInstance() { + return repository; + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/repository/CardListRepository.java b/TrelloMachingCoding/src/com/machine/coding/repository/CardListRepository.java new file mode 100644 index 0000000..9fcb033 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/repository/CardListRepository.java @@ -0,0 +1,18 @@ +package com.machine.coding.repository; + +import java.io.Serializable; + +import com.machine.coding.model.Base; + +public class CardListRepository extends GenericRepository { + + private static CardListRepository repository = new CardListRepository<>(); + + private CardListRepository() { + + } + + public static CardListRepository getInstance() { + return repository; + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/repository/CardRepository.java b/TrelloMachingCoding/src/com/machine/coding/repository/CardRepository.java new file mode 100644 index 0000000..9602774 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/repository/CardRepository.java @@ -0,0 +1,20 @@ +package com.machine.coding.repository; + +import java.io.Serializable; + +import com.machine.coding.model.Base; + +public class CardRepository extends GenericRepository { + + private static CardRepository repository = new CardRepository<>(); + + private CardRepository() { + + } + + public static CardRepository getInstance() { + return repository; + } + + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/repository/GenericRepository.java b/TrelloMachingCoding/src/com/machine/coding/repository/GenericRepository.java new file mode 100644 index 0000000..e87963d --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/repository/GenericRepository.java @@ -0,0 +1,49 @@ +package com.machine.coding.repository; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import com.machine.coding.model.Base; + +public class GenericRepository { + + private Map repository = new HashMap<>(); + + @SuppressWarnings("unchecked") + public K create(V object) { + // generate random id; + UUID uuid = UUID.randomUUID(); + K id = (K) uuid.toString(); + object.setId((String) id); + repository.put(id, object); + return id; + } + + public void delete(K key) { + repository.remove(key); + } + + public V getById(K key) { + return repository.get(key); + } + + public List getAll() { + List outputList = new ArrayList(); + Collection values = repository.values(); + for (V v : values) { + outputList.add(v); + } + return outputList; + } + + @SuppressWarnings("unchecked") + public void update( V object) { + repository.put((K) object.getId(), object); + } + +} \ No newline at end of file diff --git a/TrelloMachingCoding/src/com/machine/coding/service/BoardService.java b/TrelloMachingCoding/src/com/machine/coding/service/BoardService.java new file mode 100644 index 0000000..0e4c7a4 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/service/BoardService.java @@ -0,0 +1,57 @@ +package com.machine.coding.service; + +import java.io.Serializable; + +import com.machine.coding.common.ServiceFactory; +import com.machine.coding.common.UserBase; +import com.machine.coding.model.Base; +import com.machine.coding.model.Board; +import com.machine.coding.model.CardList; +import com.machine.coding.model.User; +import com.machine.coding.repository.BoardRepository; + +public class BoardService extends GenericService { + + @SuppressWarnings("rawtypes") + private CardListService cardListService; + + public BoardService() { + this.repository = BoardRepository.getInstance(); + this.cardListService = (CardListService) ServiceFactory.getService("CARDLIST_SERVICE"); + } + + @SuppressWarnings("unchecked") + public void delete(K id, boolean isCascadeDelete) { + V object = getById(id); + super.delete(id); + if (isCascadeDelete) { + Board board = (Board) object; + for (CardList cardList : board.getCardLists()) { + cardListService.delete(cardList); + } + } + } + + public void addMember(K boardId, String memberId) { + + Board board = (Board) getById(boardId); + User member = UserBase.getUser(memberId); + board.addMember(member); + + } + + public void removeMember(K boardId, String memberId) { + + Board board = (Board) getById(boardId); + User member = UserBase.getUser(memberId); + board.removeMember(member); + + } + + public void addCardList(K boardId, String cardListId) { + Board board = (Board) getById(boardId); + CardList cardList = (CardList) cardListService.getById(cardListId); + board.addCardList(cardList); + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/service/CardListService.java b/TrelloMachingCoding/src/com/machine/coding/service/CardListService.java new file mode 100644 index 0000000..c2c7d15 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/service/CardListService.java @@ -0,0 +1,51 @@ +package com.machine.coding.service; + +import java.io.Serializable; + +import com.machine.coding.common.ServiceFactory; +import com.machine.coding.model.Base; +import com.machine.coding.model.Card; +import com.machine.coding.model.CardList; +import com.machine.coding.repository.CardListRepository; + +public class CardListService extends GenericService { + + private CardService cardService; + + public CardListService() { + this.repository = CardListRepository.getInstance(); + this.cardService = (CardService) ServiceFactory.getService("CARD_SERVICE"); + } + + public void addCard(K cardListId, String cardId) { + CardList cardList = (CardList) getById(cardListId); + Card card = (Card) cardService.getById(cardId); + cardList.addCard(card); + } + + @SuppressWarnings("unchecked") + public void delete(K id, boolean isCascadeDelete) { + V object = getById(id); + super.delete(id); + CardList cardList = (CardList) object; + + cardList.getBoard().removeCardList(cardList); + + if (isCascadeDelete) { + for (Card card : cardList.getCards()) { + cardService.delete(card); + } + } + + } + + + public void moveCard(K cardId, K cardListId) { + Card card = (Card) cardService.getById(cardId); + card.getCardList().removeCard(card); + + CardList newCardList = (CardList) getById(cardListId); + newCardList.addCard(card); + card.setCardList(newCardList); + } +} diff --git a/TrelloMachingCoding/src/com/machine/coding/service/CardService.java b/TrelloMachingCoding/src/com/machine/coding/service/CardService.java new file mode 100644 index 0000000..fe411a0 --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/service/CardService.java @@ -0,0 +1,38 @@ +package com.machine.coding.service; + +import java.io.Serializable; + +import com.machine.coding.common.ServiceFactory; +import com.machine.coding.common.UserBase; +import com.machine.coding.model.Base; +import com.machine.coding.model.Card; +import com.machine.coding.model.CardList; +import com.machine.coding.repository.CardRepository; + +public class CardService extends GenericService { + + public CardService() { + this.repository = CardRepository.getInstance(); + } + + @Override + public void delete(K id) { + V object = getById(id); + super.delete(id); + + Card card = (Card) object; + card.getCardList().removeCard(card); + } + + public void assign(K cardId, String userId) { + Card card = (Card) getById(cardId); + card.setAssignedUser(UserBase.getUser(userId)); + + } + + public void unAssign(K cardId) { + Card card = (Card) getById(cardId); + card.setAssignedUser(null); + } + +} diff --git a/TrelloMachingCoding/src/com/machine/coding/service/GenericService.java b/TrelloMachingCoding/src/com/machine/coding/service/GenericService.java new file mode 100644 index 0000000..01ac55d --- /dev/null +++ b/TrelloMachingCoding/src/com/machine/coding/service/GenericService.java @@ -0,0 +1,45 @@ +package com.machine.coding.service; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.List; + +import com.machine.coding.model.Base; +import com.machine.coding.repository.GenericRepository; + +public class GenericService { + + protected GenericRepository repository; + + public K create(V object) { + K id = repository.create(object); + System.out.println("Created " + object.getClass().getName() + " : " + id); + return id; + } + + public void delete(K id) { + repository.delete(id); + } + + public V getById(K id) { + return repository.getById(id); + } + + public List getAll() { + return repository.getAll(); + } + + public void update(V object) { + repository.update(object); + } + public void updateField(String fieldName, Object fieldValue, K id) + throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + V obj = getById(id); + Class objClass = obj.getClass(); + Field field = objClass.getDeclaredField(fieldName); + field.setAccessible(true); + field.set(obj, fieldValue); + + update(obj); + } +}