Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се имплементира класа ArchiveStore во која се чува листа на архиви (елементи за архивирање).
- Секој елемент за архивирање Archive има:
- id - цел број
- dateArchived - датум на архивирање.
- Постојат два видови на елементи за архивирање, LockedArchive за кој дополнително се чува датум до кој не смее да се отвори dateToOpen и SpecialArchive за кој се чуваат максимален број на дозволени отварања maxOpen. За елементите за архивирање треба да се обезбедат следните методи:
- LockedArchive(int id, Date dateToOpen) - конструктор за заклучена архива
- SpecialArchive(int id, int maxOpen) - конструктор за специјална архива
- За класата ArchiveStore да се обезбедат следните методи:
- ArchiveStore() - default конструктор
- void archiveItem(Archive item, Date date) - метод за архивирање елемент item на одреден датум date
- void openItem(int id, Date date) - метод за отварање елемент од архивата со зададен id и одреден датум date. Ако не постои елемент со даденото id треба да се фрли исклучок од тип NonExistingItemException со порака Item with id [id] doesn't exist.
- String getLog() - враќа стринг со сите пораки запишани при архивирањето и отварањето архиви во посебен ред.
- За секоја акција на архивирање во текст треба да се додаде следната порака Item [id] archived at [date], додека за секоја акција на отварање архива треба да се додаде Item [id] opened at [date]. При отварање ако се работи за LockedArhive и датумот на отварање е пред датумот кога може да се отвори, да се додаде порака Item [id] cannot be opened before [date]. Ако се работи за SpecialArhive и се обидиеме да ја отвориме повеќе пати од дозволениот број (maxOpen) да се додаде порака Item [id] cannot be opened more than [maxOpen] times.
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Scanner;
- class NonExistingItemException extends Exception {
- public NonExistingItemException(String message) {
- super(message);
- }
- }
- abstract class Archive {
- private int id;
- private Date date_archived;
- public Archive(int id) {
- this.id = id;
- }
- public void setDate_archived(Date date_archived) {
- this.date_archived = date_archived;
- }
- public Date getDate_archived() {
- return date_archived;
- }
- public int getId() {
- return id;
- }
- @Override
- public String toString() {
- return "Archive{" +
- "id=" + id +
- ", date_archived=" + date_archived +
- '}';
- }
- public abstract String open(Date date);
- }
- class LockedArchive extends Archive {
- private Date dateToOpen;
- public LockedArchive(int id, Date dateToOpen) {
- super(id);
- this.dateToOpen = dateToOpen;
- }
- public Date getDateToOpen() {
- return dateToOpen;
- }
- @Override
- public String open(Date date) {
- if (date.before(this.getDateToOpen()))
- return String.format("Item %d cannot be opened before %s\n", this.getId(), dateToOpen.toString()); return ("Item " + getId() + " opened at " + date.toString() + "\n");
- }
- }
- class SpecialArchive extends Archive {
- private int maxOpen;
- private int currentTimesOpened;
- public SpecialArchive(int id, int maxOpen) {
- super(id);
- this.maxOpen = maxOpen;
- }
- public void setCurrentTimesOpened(int currentTimesOpened) {
- this.currentTimesOpened = currentTimesOpened;
- }
- public int getCurrentTimesOpened() {
- return currentTimesOpened;
- }
- public int getMaxOpen() {
- return maxOpen;
- }
- @Override
- public String open(Date date) {
- if (this.getMaxOpen() == this.getCurrentTimesOpened())
- return ("Item " + getId() + " cannot be opened more than " + this.getMaxOpen() + " times\n");
- currentTimesOpened++;
- return ("Item " + getId() + " opened at " + date.toString() + "\n");
- }
- }
- class ArchiveStore {
- private List<Archive> archiveList;
- private static StringBuilder sb;
- public ArchiveStore() {
- archiveList = new ArrayList<>();
- sb = new StringBuilder();
- }
- public void archiveItem(Archive item, Date date) {
- item.setDate_archived(date);
- archiveList.add(item);
- sb.append(String.format("Item %d archived at %s%n", item.getId(), date.toString()));
- }
- public void openItem(int id, Date date) throws NonExistingItemException {
- Archive a = archiveList.stream().filter(each -> each.getId() == id).findAny().orElse(null);
- if (a == null)
- throw new NonExistingItemException(String.format("Item with id %d doesn't exist", id));
- sb.append(a.open(date));
- }
- public String getLog() {
- return sb.toString().replaceAll("GMT","UTC");
- }
- }
- public class ArchiveStoreTest {
- public static void main(String[] args) {
- ArchiveStore store = new ArchiveStore();
- Date date = new Date(113, 10, 7);
- Scanner scanner = new Scanner(System.in);
- scanner.nextLine();
- int n = scanner.nextInt();
- scanner.nextLine();
- scanner.nextLine();
- int i;
- for (i = 0; i < n; ++i) {
- int id = scanner.nextInt();
- long days = scanner.nextLong();
- Date dateToOpen = new Date(date.getTime() + (days * 24 * 60
- * 60 * 1000));
- LockedArchive lockedArchive = new LockedArchive(id, dateToOpen);
- store.archiveItem(lockedArchive, date);
- }
- scanner.nextLine();
- scanner.nextLine();
- n = scanner.nextInt();
- scanner.nextLine();
- scanner.nextLine();
- for (i = 0; i < n; ++i) {
- int id = scanner.nextInt();
- int maxOpen = scanner.nextInt();
- SpecialArchive specialArchive = new SpecialArchive(id, maxOpen);
- store.archiveItem(specialArchive, date);
- }
- scanner.nextLine();
- scanner.nextLine();
- while (scanner.hasNext()) {
- int open = scanner.nextInt();
- try {
- store.openItem(open, date);
- } catch (NonExistingItemException e) {
- System.out.println(e.getMessage());
- }
- }
- System.out.println(store.getLog());
- }
- }
- Sample input
- Locked Archive Count
- 2
- Id Date (Days in future)
- 1 50
- 2 -25
- Special Archive Count
- 2
- Id MaxOpen
- 3 5
- 4 2
- Opening
- 1 2 3 7 4 4 4 3 3 3 3 3
- Sample output
- Item with id 7 doesn't exist
- Item 1 archived at Thu Nov 07 00:00:00 UTC 2013
- Item 2 archived at Thu Nov 07 00:00:00 UTC 2013
- Item 3 archived at Thu Nov 07 00:00:00 UTC 2013
- Item 4 archived at Thu Nov 07 00:00:00 UTC 2013
- Item 1 cannot be opened before Fri Dec 27 00:00:00 UTC 2013
- Item 2 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 3 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 4 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 4 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 4 cannot be opened more than 2 times
- Item 3 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 3 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 3 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 3 opened at Thu Nov 07 00:00:00 UTC 2013
- Item 3 cannot be opened more than 5 times
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement