Skip to content

Commit c1e743d

Browse files
committed
Initial commit
0 parents  commit c1e743d

File tree

13 files changed

+347
-0
lines changed

13 files changed

+347
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.idea
2+
out
3+
*.iml
4+
*.txt

src/app/Main.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package app;
2+
3+
import app.filtering.FileFilter;
4+
import app.filtering.FileFilterBuilder;
5+
import app.filtering.FilterStrategies;
6+
7+
import java.util.Scanner;
8+
import java.util.logging.Level;
9+
import java.util.logging.Logger;
10+
11+
public class Main {
12+
13+
public static void main(String[] args) {
14+
boolean keepRunning = true;
15+
while(keepRunning) {
16+
keepRunning = runAppLoop();
17+
}
18+
}
19+
20+
private static boolean runAppLoop() {
21+
boolean keepRunning;Scanner sc = new Scanner(System.in);
22+
String inputPath = null;
23+
String comparePath = null;
24+
boolean valid = false;
25+
while(!valid) {
26+
System.out.println("type the name of the file containing data you want to be filtered");
27+
inputPath = sc.nextLine();
28+
System.out.println("type the name of the file containing data you want to use to filter");
29+
comparePath = sc.nextLine();
30+
System.out.println("");
31+
valid = (inputPath != null && comparePath != null);
32+
}
33+
34+
filter(inputPath, comparePath);
35+
keepRunning = !sc.nextLine().equals("exit");
36+
return keepRunning;
37+
}
38+
39+
private static void filter(String inputPath, String comparePath) {
40+
FileFilter filter = new FileFilterBuilder()
41+
.setFilterStrategy(FilterStrategies.FOLDER_IN_LINK)
42+
.setToFilterSource(inputPath)
43+
.setToCompareSource(comparePath)
44+
.build();
45+
filter.filter();
46+
Logger.getLogger("LINKFISCHER").log(Level.INFO, "Your Files have been filtered!");
47+
System.out.println("Type 'exit' to exit the program");
48+
}
49+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package app.filereading;
2+
3+
import app.model.Folder;
4+
import app.model.ITextObject;
5+
6+
import java.io.BufferedReader;
7+
import java.io.IOException;
8+
import java.util.logging.Level;
9+
import java.util.logging.Logger;
10+
11+
public class FolderReader implements ITextReader {
12+
13+
private static final Logger logger = Logger.getLogger("FileReading");
14+
private final BufferedReader br;
15+
16+
public FolderReader(BufferedReader br) {
17+
this.br = br;
18+
}
19+
20+
@Override
21+
public ITextObject readNext() {
22+
Folder result;
23+
try {
24+
String line = br.readLine();
25+
if (line == null) {
26+
result = new Folder("#empty");
27+
} else {
28+
result = new Folder(line);
29+
}
30+
31+
} catch (IOException e) {
32+
logger.log(Level.SEVERE, "error reading line");
33+
result = new Folder("#empty");
34+
}
35+
return result;
36+
}
37+
38+
@Override
39+
protected void finalize() throws Throwable {
40+
super.finalize();
41+
br.close();
42+
}
43+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package app.filereading;
2+
3+
import app.model.ITextObject;
4+
5+
public interface ITextReader {
6+
7+
ITextObject readNext();
8+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package app.filereading;
2+
3+
import app.model.GitHubLink;
4+
import app.model.ITextObject;
5+
import sun.awt.image.ImageWatched;
6+
7+
import java.io.BufferedReader;
8+
import java.io.IOException;
9+
import java.util.logging.Level;
10+
import java.util.logging.Logger;
11+
12+
public class LinkReader implements ITextReader {
13+
14+
private static final Logger logger = Logger.getLogger("FileReading");
15+
private final BufferedReader br;
16+
17+
public LinkReader(BufferedReader br) {
18+
this.br = br;
19+
}
20+
21+
public ITextObject readNext() {
22+
GitHubLink result;
23+
try {
24+
String line = br.readLine();
25+
if (line == null) {
26+
result = new GitHubLink("#empty");
27+
} else {
28+
result = new GitHubLink(line);
29+
}
30+
} catch (IOException e) {
31+
logger.log(Level.SEVERE, "error reading line");
32+
result = new GitHubLink("#empty");
33+
}
34+
return result;
35+
}
36+
37+
@Override
38+
protected void finalize() throws Throwable {
39+
super.finalize();
40+
br.close();
41+
}
42+
}

src/app/filtering/FileFilter.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package app.filtering;
2+
3+
import app.filereading.ITextReader;
4+
5+
import java.io.IOException;
6+
7+
public class FileFilter {
8+
9+
private final ITextReader toFilterSource;
10+
private final ITextReader compareSource;
11+
private final IFilterStrategy filterStrategy;
12+
13+
public FileFilter(ITextReader toFilterSource, ITextReader compareSource, IFilterStrategy filterStrategy) {
14+
this.toFilterSource = toFilterSource;
15+
this.compareSource = compareSource;
16+
this.filterStrategy = filterStrategy;
17+
}
18+
19+
public void filter() {
20+
try {
21+
filterStrategy.filter(toFilterSource, compareSource);
22+
} catch (IOException e) {
23+
e.printStackTrace();
24+
}
25+
}
26+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package app.filtering;
2+
3+
import app.filereading.ITextReader;
4+
import app.filereading.LinkReader;
5+
6+
import java.io.BufferedReader;
7+
import java.io.FileNotFoundException;
8+
import java.io.FileReader;
9+
import java.util.logging.Level;
10+
import java.util.logging.Logger;
11+
12+
public class FileFilterBuilder {
13+
14+
private static final Logger logger = Logger.getLogger("FileFilterBuilder");
15+
16+
private ITextReader toFilterSource;
17+
private ITextReader compareSource;
18+
private IFilterStrategy filterStrategy;
19+
20+
public FileFilter build() {
21+
return new FileFilter(this.toFilterSource, this.compareSource, this.filterStrategy);
22+
}
23+
24+
public FileFilterBuilder setToFilterSource(String sourcePath) {
25+
try {
26+
this.toFilterSource = new LinkReader(new BufferedReader(new FileReader(sourcePath)));
27+
} catch (FileNotFoundException e) {
28+
logger.log(Level.SEVERE, "file not found");
29+
}
30+
return this;
31+
}
32+
33+
public FileFilterBuilder setToCompareSource(String sourcePath) {
34+
try {
35+
this.compareSource = new LinkReader(new BufferedReader(new FileReader(sourcePath)));
36+
} catch (FileNotFoundException e) {
37+
logger.log(Level.SEVERE, "file not found");
38+
}
39+
return this;
40+
}
41+
42+
public FileFilterBuilder setFilterStrategy(FilterStrategies strategy) {
43+
this.filterStrategy = strategy.getStrategy();
44+
return this;
45+
}
46+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package app.filtering;
2+
3+
public enum FilterStrategies {
4+
5+
FOLDER_IN_LINK(new FolderInLinkFilterStrategy());
6+
7+
private final IFilterStrategy strategy;
8+
9+
FilterStrategies(IFilterStrategy strategy) {
10+
this.strategy = strategy;
11+
}
12+
13+
IFilterStrategy getStrategy(){
14+
return this.strategy;
15+
}
16+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package app.filtering;
2+
3+
import app.filereading.ITextReader;
4+
import app.model.ITextObject;
5+
6+
import java.io.BufferedWriter;
7+
import java.io.FileWriter;
8+
import java.io.IOException;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.logging.Level;
12+
import java.util.logging.Logger;
13+
14+
public class FolderInLinkFilterStrategy implements IFilterStrategy {
15+
16+
private final Logger logger = Logger.getLogger("Filter");
17+
18+
private boolean linkContainsFolderName(String link, String folder) {
19+
return
20+
link.replace("git://github.com/", "").toLowerCase().contains(folder);
21+
}
22+
23+
@Override
24+
public void filter(ITextReader toFilterSource, ITextReader compareSource) throws IOException {
25+
26+
final BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"));
27+
final List<ITextObject> toFilterList = new ArrayList<ITextObject>();
28+
final List<ITextObject> compareList = new ArrayList<ITextObject>();
29+
30+
fillObjectListFromSource(toFilterSource, toFilterList);
31+
fillObjectListFromSource(compareSource, compareList);
32+
33+
iterateThroughLists(bw, toFilterList, compareList);
34+
bw.close();
35+
}
36+
37+
private void fillObjectListFromSource(ITextReader compareSource, List<ITextObject> compareList) {
38+
ITextObject nextCompareObject = compareSource.readNext();
39+
while(!nextCompareObject.getName().equals("#empty")) {
40+
compareList.add(nextCompareObject);
41+
nextCompareObject = compareSource.readNext();
42+
}
43+
}
44+
45+
private void iterateThroughLists(BufferedWriter bw, List<ITextObject> toFilterList, List<ITextObject> compareList) throws IOException {
46+
for (ITextObject link : toFilterList) {
47+
boolean deleteLink = false;
48+
for (ITextObject folder : compareList) {
49+
if (linkContainsFolderName(link.getName(), folder.getName())) {
50+
deleteLink = true;
51+
}
52+
}
53+
DeleteOrWriteLink(bw, link, deleteLink);
54+
}
55+
}
56+
57+
private void DeleteOrWriteLink(BufferedWriter bw, ITextObject link, boolean deleteLink) throws IOException {
58+
if (deleteLink) {
59+
logger.log(Level.INFO, "deleting link " + link.getName());
60+
} else {
61+
logger.log(Level.INFO, "link stays: " + link.getName());
62+
bw.write(link.getName());
63+
bw.write("\n");
64+
}
65+
}
66+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package app.filtering;
2+
3+
import app.filereading.ITextReader;
4+
5+
import java.io.IOException;
6+
7+
public interface IFilterStrategy {
8+
9+
void filter(ITextReader toFilterSource, ITextReader compareSource) throws IOException;
10+
}

0 commit comments

Comments
 (0)