Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix Parse reader write randomFAR #18

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,18 @@

public class Main {
public static enum datatype{
CAR,
BOOK,
ROOTVEGETABLE
CAR(Car.class),
BOOK(Book.class),
ROOTVEGETABLE(RootVegetable.class);
private final Class<?> clazz;

datatype(Class<?> clazz) {
this.clazz = clazz;
}

public String getClassName() {
return clazz.getSimpleName();
}
}
public static void main(String[] args) {
//Storage storage = Storage.getInstance();
Expand Down
31 changes: 9 additions & 22 deletions src/main/java/ParseBook.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
import java.util.Map;

public class ParseBook {
public Book parse(String line) {
String[] parts = line.substring(line.indexOf("{") + 1, line.indexOf("}")).split(",");
String author = null;
String title = null;
Integer pages = null;
private final ParserHelper parserHelper = new ParserHelper();

for (String part : parts) {
String[] keyValue = part.split("=");
String key = keyValue[0].trim();
String value = keyValue[1].trim().replaceAll("'", "");
public Book parse(String line) {
Map<String, String> keyValueMap = parserHelper.parseKeyValuePairs(line);
String author = keyValueMap.get("author");
String title = keyValueMap.get("title");
Integer pages = parserHelper.parseInteger(keyValueMap.get("pages"));

if (key.contains("author")) {
author = value;
} else if (key.contains("title")) {
title = value;
} else if (key.contains("pages")) {
try {
pages = Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}
}
}
return new Book.Builder().setAuthor(author).setTitle(title).setPages(pages).build();
return Book.createInstance(author,title,pages);
}
}
34 changes: 9 additions & 25 deletions src/main/java/ParseCar.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,14 @@
import java.util.Map;

public class ParseCar {
public Car parse(String line) {
String[] parts = line.substring(line.indexOf("{") + 1, line.indexOf("}")).split(",");
Integer power = null;
String model = null;
Integer year = null;
private final ParserHelper parserHelper = new ParserHelper();

for (String part : parts) {
String[] keyValue = part.split("=");
String key = keyValue[0].trim();
String value = keyValue[1].trim().replaceAll("'", "");
public Car parse(String line) {
Map<String, String> keyValueMap = parserHelper.parseKeyValuePairs(line);
Integer power = parserHelper.parseInteger(keyValueMap.get("power"));
String model = keyValueMap.get("model");
Integer year = parserHelper.parseInteger(keyValueMap.get("yearOfProduction"));

if (key.contains("power")) {
try {
power = Integer.parseInt(value);
} catch (NumberFormatException e) {
}
} else if (key.contains("model")) {
model = value;
} else if (key.contains("yearOfProduction")) {
try {
year = Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}
}
}
return new Car.BuildCAr().setPower(power).setModel(model).setYearOfProduction(year).build();
return Car.createInstance(power,model,year);
}
}
31 changes: 9 additions & 22 deletions src/main/java/ParseRootVegetable.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,14 @@
import java.util.Map;

public class ParseRootVegetable {
public RootVegetable parse(String line) {
String[] parts = line.substring(line.indexOf("{") + 1, line.indexOf("}")).split(",");
String type = null;
String colour = null;
Integer weight = null;
private final ParserHelper parserHelper = new ParserHelper();

for (String part : parts) {
String[] keyValue = part.split("=");
String key = keyValue[0].trim();
String value = keyValue[1].trim().replaceAll("'", "");
public RootVegetable parse(String line) {
Map<String, String> keyValueMap = parserHelper.parseKeyValuePairs(line);
String type = keyValueMap.get("type");
String colour = keyValueMap.get("colour");
Integer weight = parserHelper.parseInteger(keyValueMap.get("weight"));

if (key.contains("type")) {
type = value;
} else if (key.contains("colour")) {
colour = value;
} else if (key.contains("weight")) {
try {
weight = Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}
}
}
return new RootVegetable.Builder().setType(type).setColour(colour).setWeight(weight).build();
return RootVegetable.createInstance(type, colour, weight);
}
}
28 changes: 28 additions & 0 deletions src/main/java/ParserHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import java.util.HashMap;
import java.util.Map;

class ParserHelper {

public Map<String, String> parseKeyValuePairs(String line) {
String content = line.substring(line.indexOf("{") + 1, line.indexOf("}"));
Map<String, String> keyValueMap = new HashMap<>();
for (String part : content.split(",")) {
String[] keyValue = part.split("=");
if (keyValue.length != 2) {
continue;
}
String key = keyValue[0].trim();
String value = keyValue[1].trim().replaceAll("'", "");
keyValueMap.put(key, value);
}
return keyValueMap;
}

public Integer parseInteger(String value) {
try {
return Integer.parseInt(value);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отступы по всему проекту - 4 символа, здесь явно больше, поправим разом по всему проекту, это я к слову

} catch (NumberFormatException e) {
return null;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если здесь не возвращаешь предупреждение о том, что данные не корректны, верни там, где валидацию проводишь

}
}
}
51 changes: 18 additions & 33 deletions src/main/java/RandomFillArrayAction.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import java.io.File;
import java.util.Scanner;

public class RandomFillArrayAction implements MenuAction {
Expand All @@ -23,57 +24,41 @@ public void execute(){
String choice = scanner.next();
switch (choice) {
case "1":
do{
Storage<Car> storage= Storage.<Car>getInstance(Main.datatype.CAR);
int start_index=findFirst(storage,size);
Object[] objects = storage.getObjects();
ItemRandomizer<Car> carRandomizer = new CarRandomizer();


for (int i = start_index; i < objects.length; i++) {
objects[i] = carRandomizer.generate();
}
fillArray(scanner,size,Main.datatype.CAR,new CarRandomizer());
step = false;
}while(false);
break;
case "2":
System.out.println("Выбран Книга");
do{
//Book
Storage<Book> storage= Storage.<Book>getInstance(Main.datatype.BOOK);
int start_index=findFirst(storage,size);
Object[] objects = storage.getObjects();
ItemRandomizer<Book> bookRandomizer = new BookRandomizer();

for (int i = start_index; i < objects.length; i++) {
objects[i] = bookRandomizer.generate();
}
fillArray(scanner,size,Main.datatype.BOOK,new BookRandomizer());
step = false;
}while(false);
break;
case "3":
System.out.println("Выбран Корнепллод");
do{
Storage<RootVegetable> storage= Storage.<RootVegetable>getInstance(Main.datatype.ROOTVEGETABLE);
int start_index=findFirst(storage,size);
Object[] objects = storage.getObjects();

ItemRandomizer<RootVegetable> rootVegetableRandomizer = new RootVegetableRandomizer();

for (int i = start_index; i < objects.length; i++) {
objects[i] = rootVegetableRandomizer.generate();
}
fillArray(scanner,size,Main.datatype.ROOTVEGETABLE,new RootVegetableRandomizer());
step = false;
}while(false);
break;
case "0":
step = false;
break;
}
}

System.out.println("выход");
}

private <T> void fillArray(Scanner scanner, int size, Main.datatype datatype, ItemRandomizer<T> randomizer) {
Storage<T> storage = Storage.<T>getInstance(datatype);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отлично, ещё один джейн эйрек )

int start_index = findFirst(storage, size);
Object[] objects = storage.getObjects();
for (int i = start_index; i < objects.length; i++) {
objects[i] = randomizer.generate();
}
String className = datatype.getClassName();
WriterFile writerFile = new WriterFile<>(new File(className + ".txt"));
writerFile.createdFile();
writerFile.writeText(objects);
}

private int findFirst(Storage<? extends Object>storage, int size){
Object[] objects=storage.getObjects();
int startIndex = 0;
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/ReaderFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;

public class ReaderFile {

Expand All @@ -14,11 +15,12 @@ public <T> T[] readAndConvert(String filePath, Class<T> type) throws IOException
}
reader.close();
T[] objects = (T[]) Array.newInstance(type, count);
reader = new BufferedReader(new FileReader(filePath)); // Снова открываем файл
reader = new BufferedReader(new FileReader(filePath));
int index = 0;
while ((line = reader.readLine()) != null) {
objects[index++] = parseObject(line, type);
}
Arrays.stream(objects).forEach(System.out::println);
reader.close();
return objects;
}
Expand All @@ -33,4 +35,4 @@ private <T> T parseObject(String line, Class<T> type) {
throw new IllegalArgumentException("Неподдерживаемый тип: " + type.getName());
}
}
}
}
1 change: 1 addition & 0 deletions src/main/java/WriterFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public <T> void writeText(T[] t) {
System.out.println(this.name + " ошибка написания " + e);
}
}

public static void deleteFile(String nameFile) {
File nameFileExample = new File(nameFile);
if (nameFileExample.exists()) {
Expand Down