Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
sbholmes committed Sep 20, 2021
1 parent 9bfeddf commit d8ae228
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 62 deletions.
46 changes: 46 additions & 0 deletions src/main/java/voruti/json2config/service/Appender.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,65 @@
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import lombok.extern.slf4j.Slf4j;
import voruti.json2config.model.IAppendable;

/**
* Common code for appending channel links and metadata to items
*
* @author sbholmes
*
*/
@Slf4j
public class Appender {

private Appender() {
}

/**
* Appends data found in {@code appendableList} onto the end of items in the {@code directory}
*
* @param directory the directory in which to search for ".items" files
* @param appendableList the list of data that needs appending to items
*/
public static void searchAndAppend(String directory, List<IAppendable> appendableList) {
// search items files:
List<String> itemsFiles = Appender.findItemsFilesInDir(directory);
// get names of all items:
List<String> itemNamesList = itemsFiles.stream()
.map(Appender::getItemNamesFromFile)
.flatMap(Collection::stream)
.collect(Collectors.toList());
log.info("Found {} items", itemNamesList.size());
log.trace("itemNamesList={}", itemNamesList);

// only data present in both lists:
List<IAppendable> relevantDataList = appendableList.stream()
.filter(data -> itemNamesList.stream()
.anyMatch(itemName -> itemName.equals(data.getItemName())))
.collect(Collectors.toList());
log.info("{} match with each other", relevantDataList.size());
log.trace("relevantDataList={}", relevantDataList);

// append the right data to the right item
int count = 0;
for (IAppendable appendable : relevantDataList) {
for (String iFile : itemsFiles) {
if (Appender.appendToItemInFile(appendable, iFile)) {
count++;
}
}
}
log.info("Successfully appended {} channels/metadata!", count);

log.warn("Warning: You might need to manually fix some converting mistakes (double channels, etc.)");
}

/**
* Returns a {@link List} of Strings containing the names of all items in
* {@code fileName}.
Expand Down
37 changes: 4 additions & 33 deletions src/main/java/voruti/json2config/service/ChannelAppender.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package voruti.json2config.service;

import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import lombok.extern.slf4j.Slf4j;
import voruti.json2config.model.IAppendable;
import voruti.json2config.model.json.JsonChannelLink;

/**
Expand All @@ -17,13 +17,11 @@ public class ChannelAppender {
private ChannelAppender() {
}


/**
* Appends the channel links from {@code channelLinkFile} to all ".items" files
* in the {@code directory}.
*
* @param channelLinkFile path to the file which contains the channel links in
* JSON format
* @param channelLinkFile path to the file which contains the channel links in JSON format
* @param directory the directory in which to search for ".items" files
*/
public static void start(String channelLinkFile, String directory) {
Expand All @@ -33,41 +31,14 @@ public static void start(String channelLinkFile, String directory) {
// open file:
String content = SharedService.openFileToString(channelLinkFile);
// map to list of channel links:
List<JsonChannelLink> channelLinkList = SharedService.jsonToConvertibleMap(content, Type.CHANNEL).values().stream()
List<IAppendable> channelLinkList = SharedService.jsonToConvertibleMap(content, Type.CHANNEL).values().stream()
.map(JsonChannelLink.class::cast)
.collect(Collectors.toList());
log.info("Found {} channel links", channelLinkList.size());
log.trace("channelLinkList={}", channelLinkList);

// search items files:
List<String> itemsFiles = Appender.findItemsFilesInDir(directory);
// get names of all items:
List<String> itemNamesList = itemsFiles.stream()
.map(Appender::getItemNamesFromFile)
.flatMap(Collection::stream)
.collect(Collectors.toList());
log.info("Found {} items", itemNamesList.size());
log.trace("itemNamesList={}", itemNamesList);

// only channels present in both lists:
List<JsonChannelLink> relevantChannelLinkList = channelLinkList.stream()
.filter(channelLink -> itemNamesList.stream()
.anyMatch(itemName -> itemName.equals(channelLink.getValue().getItemName())))
.collect(Collectors.toList());
log.info("{} match with each other", relevantChannelLinkList.size());
log.trace("relevantChannelLinkList={}", relevantChannelLinkList);

int count = 0;
for (JsonChannelLink channel : relevantChannelLinkList) {
for (String iFile : itemsFiles) {
if (Appender.appendToItemInFile(channel, iFile)) {
count++;
}
}
}
log.info("Successfully appended {} channel links!", count);
Appender.searchAndAppend(directory, channelLinkList);

log.warn("Warning: You might need to manually fix some converting mistakes (double channels, etc.)");
} catch (IOException e) {
log.error(Constants.LOG_CANT_OPEN_FILE, channelLinkFile);
}
Expand Down
32 changes: 3 additions & 29 deletions src/main/java/voruti/json2config/service/MetadataAppender.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package voruti.json2config.service;

import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import lombok.extern.slf4j.Slf4j;
import voruti.json2config.model.IAppendable;
import voruti.json2config.model.json.JsonMetadata;

/**
Expand All @@ -32,39 +32,13 @@ public static void start(String metadataFile, String directory) {
// open file:
String content = SharedService.openFileToString(metadataFile);
// map to list of metadata:
List<JsonMetadata> metadataList = SharedService.jsonToConvertibleMap(content, Type.METADATA).values().stream()
List<IAppendable> metadataList = SharedService.jsonToConvertibleMap(content, Type.METADATA).values().stream()
.map(JsonMetadata.class::cast)
.collect(Collectors.toList());
log.info("Found {} metadata", metadataList.size());
log.trace("metadataList={}", metadataList);

// search items files:
List<String> itemsFiles = Appender.findItemsFilesInDir(directory);
// get names of all items:
List<String> itemNamesList = itemsFiles.stream()
.map(Appender::getItemNamesFromFile)
.flatMap(Collection::stream)
.collect(Collectors.toList());
log.info("Found {} items", itemNamesList.size());
log.trace("itemNamesList={}", itemNamesList);

// only metadata present in both lists:
List<JsonMetadata> relevantMetadataList = metadataList.stream()
.filter(metadata -> itemNamesList.stream()
.anyMatch(itemName -> itemName.equals(metadata.getItemName())))
.collect(Collectors.toList());
log.info("{} match with each other", relevantMetadataList.size());
log.trace("relevantMetadataList={}", relevantMetadataList);

int count = 0;
for (JsonMetadata metadata : relevantMetadataList) {
for (String iFile : itemsFiles) {
if (Appender.appendToItemInFile(metadata, iFile)) {
count++;
}
}
}
log.info("Successfully appended {} metadata!", count);
Appender.searchAndAppend(directory, metadataList);

} catch (IOException e) {
log.error(Constants.LOG_CANT_OPEN_FILE, metadataFile);
Expand Down

0 comments on commit d8ae228

Please sign in to comment.