Skip to content

Commit 3d5ac6c

Browse files
authored
hotfix/lesson03 (#4)
+ MainArray - added choice between sorted and unsorted array-based storage + Resume - method compareTo, rewrited to use private variable uuid - method equals, input variable renamed for readability + AbstractArrayStorage - abstract methods moved on top - added implementation to methods save, delete - new abstract methods saveByIndex, deleteByIndex + ArrayStorage, SortedArrayStorage - removed methods save, delete - added new methods saveByIndex, deleteByIndex
1 parent dec14f5 commit 3d5ac6c

5 files changed

Lines changed: 95 additions & 71 deletions

File tree

src/ru/topjava/webapp/MainArray.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.topjava.webapp;
22

33
import ru.topjava.webapp.model.Resume;
4+
import ru.topjava.webapp.storage.ArrayStorage;
45
import ru.topjava.webapp.storage.SortedArrayStorage;
56
import ru.topjava.webapp.storage.Storage;
67

@@ -13,14 +14,38 @@
1314
* (just run, no need to understand)
1415
*/
1516
public class MainArray {
16-
private final static Storage ARRAY_STORAGE = new SortedArrayStorage();
17+
private static Storage arrayStorage;
1718

1819
public static void main(String[] args) throws IOException {
1920
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
2021
Resume resume;
22+
String[] params;
23+
storageChoice: while (true) {
24+
System.out.print("Выберите тип хранилища - (sort | unsort | exit): ");
25+
params = reader.readLine().trim().toLowerCase().split(" ");
26+
if (params.length < 1 || params.length > 2) {
27+
System.out.println("Неверная команда.");
28+
continue;
29+
}
30+
switch (params[0]) {
31+
case "sort":
32+
System.out.println("Выбранный тип хранилища: отсортированный массив.");
33+
arrayStorage = new SortedArrayStorage();
34+
break storageChoice;
35+
case "unsort":
36+
System.out.println("Выбранный тип хранилища: неотсортированный массив.");
37+
arrayStorage = new ArrayStorage();
38+
break storageChoice;
39+
case "exit":
40+
return;
41+
default:
42+
System.out.println("Неверная команда.");
43+
break;
44+
}
45+
}
2146
while (true) {
2247
System.out.print("Введите одну из команд - (list | save uuid | update uuid | delete uuid | get uuid | clear | exit): ");
23-
String[] params = reader.readLine().trim().toLowerCase().split(" ");
48+
params = reader.readLine().trim().toLowerCase().split(" ");
2449
if (params.length < 1 || params.length > 2) {
2550
System.out.println("Неверная команда.");
2651
continue;
@@ -34,29 +59,29 @@ public static void main(String[] args) throws IOException {
3459
printAll();
3560
break;
3661
case "size":
37-
System.out.println(ARRAY_STORAGE.size());
62+
System.out.println(arrayStorage.size());
3863
break;
3964
case "save":
4065
resume = new Resume();
4166
resume.setUuid(uuid);
42-
ARRAY_STORAGE.save(resume);
67+
arrayStorage.save(resume);
4368
printAll();
4469
break;
4570
case "update":
4671
resume = new Resume();
4772
resume.setUuid(uuid);
48-
ARRAY_STORAGE.update(resume);
73+
arrayStorage.update(resume);
4974
printAll();
5075
break;
5176
case "delete":
52-
ARRAY_STORAGE.delete(uuid);
77+
arrayStorage.delete(uuid);
5378
printAll();
5479
break;
5580
case "get":
56-
System.out.println(ARRAY_STORAGE.get(uuid));
81+
System.out.println(arrayStorage.get(uuid));
5782
break;
5883
case "clear":
59-
ARRAY_STORAGE.clear();
84+
arrayStorage.clear();
6085
printAll();
6186
break;
6287
case "exit":
@@ -69,7 +94,7 @@ public static void main(String[] args) throws IOException {
6994
}
7095

7196
static void printAll() {
72-
Resume[] all = ARRAY_STORAGE.getAll();
97+
Resume[] all = arrayStorage.getAll();
7398
System.out.println("----------------------------");
7499
if (all.length == 0) {
75100
System.out.println("Empty");

src/ru/topjava/webapp/model/Resume.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ public String toString() {
2222
}
2323

2424
@Override
25-
public boolean equals(Object o) {
26-
if (this == o) return true;
27-
if (o == null || getClass() != o.getClass()) return false;
25+
public boolean equals(Object object) {
26+
if (this == object) return true;
27+
if (object == null || getClass() != object.getClass()) return false;
2828

29-
Resume resume = (Resume) o;
29+
Resume resume = (Resume) object;
3030

3131
return uuid.equals(resume.uuid);
3232
}
@@ -38,6 +38,6 @@ public int hashCode() {
3838

3939
@Override
4040
public int compareTo(Resume resume) {
41-
return this.getUuid().compareTo(resume.getUuid());
41+
return uuid.compareTo(resume.uuid);
4242
}
4343
}

src/ru/topjava/webapp/storage/AbstractArrayStorage.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,37 @@ public abstract class AbstractArrayStorage implements Storage {
1212
protected final Resume[] storage = new Resume[STORAGE_LENGTH];
1313
protected int size = 0;
1414

15+
protected abstract int getIndex(String uuid);
16+
17+
protected abstract void saveByIndex(int resumeIndex, Resume resume);
18+
19+
protected abstract void deleteByIndex(int resumeIndex);
20+
21+
public void save(Resume resume) {
22+
int resumeIndex = getIndex(resume.getUuid());
23+
if (resumeIndex >= 0) {
24+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.save: uuid '%1$s' is already exists", resume.getUuid()));
25+
} else if (size >= STORAGE_LENGTH) {
26+
System.out.println("ERROR ru.topjava.webapp.storage.ArrayStorage.save: storage is full");
27+
} else {
28+
saveByIndex(resumeIndex, resume);
29+
}
30+
}
31+
32+
public void delete(String uuid) {
33+
int resumeIndex = getIndex(uuid);
34+
if (resumeIndex < 0) {
35+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.delete: uuid '%1$s' is not exists", uuid));
36+
} else {
37+
deleteByIndex(resumeIndex);
38+
}
39+
}
40+
1541
public void clear() {
1642
Arrays.fill(storage, 0, size, null);
1743
size = 0;
1844
}
1945

20-
public abstract void save(Resume resume);
21-
2246
public Resume get(String uuid) {
2347
int resumeIndex = getIndex(uuid);
2448
if (resumeIndex < 0) {
@@ -29,8 +53,6 @@ public Resume get(String uuid) {
2953
}
3054
}
3155

32-
public abstract void delete(String uuid);
33-
3456
/**
3557
* @return array, contains only Resumes in storage (without null)
3658
*/
@@ -50,6 +72,4 @@ public void update(Resume resume) {
5072
storage[resumeIndex] = resume;
5173
}
5274
}
53-
54-
protected abstract int getIndex(String uuid);
5575
}

src/ru/topjava/webapp/storage/ArrayStorage.java

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,6 @@
88
* Unsorted array based storage for Resumes
99
*/
1010
public class ArrayStorage extends AbstractArrayStorage {
11-
public void save(Resume resume) {
12-
int resumeIndex = getIndex(resume.getUuid());
13-
if (resumeIndex >= 0) {
14-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.save: uuid '%1$s' is already exists", resume.getUuid()));
15-
} else if (size >= STORAGE_LENGTH) {
16-
System.out.println("ERROR ru.topjava.webapp.storage.ArrayStorage.save: storage is full");
17-
} else {
18-
storage[size] = resume;
19-
size++;
20-
}
21-
}
22-
23-
public void delete(String uuid) {
24-
int resumeIndex = getIndex(uuid);
25-
if (resumeIndex < 0) {
26-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.delete: uuid '%1$s' is not exists", uuid));
27-
} else {
28-
storage[resumeIndex] = storage[size - 1];
29-
storage[size - 1] = null;
30-
size--;
31-
}
32-
}
33-
3411
protected int getIndex(String uuid) {
3512
for (int i = 0; i < size; i++) {
3613
if (storage[i].getUuid().equals(uuid)) {
@@ -39,4 +16,15 @@ protected int getIndex(String uuid) {
3916
}
4017
return -1;
4118
}
19+
20+
protected void saveByIndex(int resumeIndex, Resume resume) {
21+
storage[size] = resume;
22+
size++;
23+
}
24+
25+
protected void deleteByIndex(int resumeIndex) {
26+
storage[resumeIndex] = storage[size - 1];
27+
storage[size - 1] = null;
28+
size--;
29+
}
4230
}

src/ru/topjava/webapp/storage/SortedArrayStorage.java

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,28 @@
88
* Sorted array based storage for Resumes
99
*/
1010
public class SortedArrayStorage extends AbstractArrayStorage {
11-
public void save(Resume resume) {
12-
int resumeIndex = getIndex(resume.getUuid());
13-
if (resumeIndex >= 0) {
14-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.save: uuid '%1$s' is already exists", resume.getUuid()));
15-
} else if (size >= STORAGE_LENGTH) {
16-
System.out.println("ERROR ru.topjava.webapp.storage.ArrayStorage.save: storage is full");
17-
} else {
18-
for (int k = size - 1; k >= -(resumeIndex + 1); k--) {
19-
storage[k+1] = storage[k];
20-
}
21-
storage[-(resumeIndex + 1)] = resume;
22-
size++;
23-
24-
}
11+
protected int getIndex(String uuid) {
12+
Resume resumeToSearch = new Resume();
13+
resumeToSearch.setUuid(uuid);
14+
return Arrays.binarySearch(storage, 0, size, resumeToSearch);
2515
}
2616

27-
public void delete(String uuid) {
28-
int resumeIndex = getIndex(uuid);
29-
if (resumeIndex < 0) {
30-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.delete: uuid '%1$s' is not exists", uuid));
31-
} else {
32-
for (int k = resumeIndex; k < size - 1; k++) {
33-
storage[k] = storage[k+1];
34-
}
35-
size--;
36-
}
17+
protected void saveByIndex(int resumeIndex, Resume resume) {
18+
int rangeToCopy;
19+
int resumeIndexNext = resumeIndex + 1;
20+
int resumeIndexToSave = -(resumeIndex + 1);
21+
rangeToCopy = size + resumeIndexNext;
22+
System.arraycopy(storage, -resumeIndexNext, storage, -resumeIndex, rangeToCopy);
23+
storage[resumeIndexToSave] = resume;
24+
size++;
3725
}
3826

39-
protected int getIndex(String uuid) {
40-
Resume resumeToSearch = new Resume();
41-
resumeToSearch.setUuid(uuid);
42-
return Arrays.binarySearch(storage, 0, size, resumeToSearch);
27+
protected void deleteByIndex(int resumeIndex) {
28+
int rangeToCopy;
29+
int resumeIndexNext = resumeIndex + 1;
30+
rangeToCopy = size - resumeIndexNext;
31+
System.arraycopy(storage, resumeIndexNext, storage, resumeIndex, rangeToCopy);
32+
storage[size - 1] = null;
33+
size--;
4334
}
4435
}

0 commit comments

Comments
 (0)