Commit cb490cab2a2bfe90e2c4ad0661117321fb2f2e1f
1 parent
76eeceb7
create sample cli client
Showing
22 changed files
with
890 additions
and
108 deletions
nicolas-cli/README.md
0 → 100644
1 | +# nicolas-cli | |
2 | + | |
3 | +This module contains a sample command-line application, which uses Nicolas library to summarize chosen input text file. | |
4 | +Summary is written to target output file. Additionally, user needs to specify desired number of tokens in the summary. | |
5 | + | |
6 | +## Installation | |
7 | + | |
8 | + mvn clean install | |
9 | + | |
10 | +## Usage | |
11 | + | |
12 | + java -jar target/nicolas-cli.jar -help | |
0 | 13 | \ No newline at end of file |
... | ... |
nicolas-cli/pom.xml
... | ... | @@ -11,4 +11,70 @@ |
11 | 11 | |
12 | 12 | <artifactId>nicolas-cli</artifactId> |
13 | 13 | |
14 | + <dependencies> | |
15 | + | |
16 | + <!-- project --> | |
17 | + <dependency> | |
18 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
19 | + <artifactId>nicolas-multiservice</artifactId> | |
20 | + </dependency> | |
21 | + <dependency> | |
22 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
23 | + <artifactId>nicolas-lib</artifactId> | |
24 | + </dependency> | |
25 | + | |
26 | + <!-- third party --> | |
27 | + <dependency> | |
28 | + <groupId>com.beust</groupId> | |
29 | + <artifactId>jcommander</artifactId> | |
30 | + </dependency> | |
31 | + | |
32 | + <!-- logging --> | |
33 | + <dependency> | |
34 | + <groupId>org.slf4j</groupId> | |
35 | + <artifactId>slf4j-api</artifactId> | |
36 | + </dependency> | |
37 | + <dependency> | |
38 | + <groupId>org.slf4j</groupId> | |
39 | + <artifactId>slf4j-simple</artifactId> | |
40 | + </dependency> | |
41 | + | |
42 | + <!-- test --> | |
43 | + <dependency> | |
44 | + <groupId>junit</groupId> | |
45 | + <artifactId>junit</artifactId> | |
46 | + </dependency> | |
47 | + <dependency> | |
48 | + <groupId>org.mockito</groupId> | |
49 | + <artifactId>mockito-core</artifactId> | |
50 | + </dependency> | |
51 | + </dependencies> | |
52 | + | |
53 | + <build> | |
54 | + <plugins> | |
55 | + <plugin> | |
56 | + <artifactId>maven-assembly-plugin</artifactId> | |
57 | + <configuration> | |
58 | + <appendAssemblyId>false</appendAssemblyId> | |
59 | + <archive> | |
60 | + <manifest> | |
61 | + <mainClass>pl.waw.ipipan.zil.summ.nicolas.cli.Main</mainClass> | |
62 | + </manifest> | |
63 | + </archive> | |
64 | + <descriptorRefs> | |
65 | + <descriptorRef>jar-with-dependencies</descriptorRef> | |
66 | + </descriptorRefs> | |
67 | + </configuration> | |
68 | + <executions> | |
69 | + <execution> | |
70 | + <id>make-assembly</id> | |
71 | + <phase>package</phase> | |
72 | + <goals> | |
73 | + <goal>single</goal> | |
74 | + </goals> | |
75 | + </execution> | |
76 | + </executions> | |
77 | + </plugin> | |
78 | + </plugins> | |
79 | + </build> | |
14 | 80 | </project> |
15 | 81 | \ No newline at end of file |
... | ... |
nicolas-cli/src/main/java/pl/waw/ipipan/zil/summ/nicolas/cli/Cli.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import com.beust.jcommander.IParameterValidator; | |
4 | +import com.beust.jcommander.JCommander; | |
5 | +import com.beust.jcommander.Parameter; | |
6 | +import com.beust.jcommander.ParameterException; | |
7 | +import com.beust.jcommander.converters.FileConverter; | |
8 | +import com.beust.jcommander.validators.PositiveInteger; | |
9 | +import org.slf4j.Logger; | |
10 | +import org.slf4j.LoggerFactory; | |
11 | + | |
12 | +import java.io.File; | |
13 | + | |
14 | +class Cli { | |
15 | + | |
16 | + private static final Logger LOG = LoggerFactory.getLogger(Cli.class); | |
17 | + | |
18 | + @Parameter(names = {"-help", "-h"}, description = "Print help") | |
19 | + private boolean help = false; | |
20 | + | |
21 | + @Parameter(names = {"-input", "-i"}, description = "Input text file to summarize", required = true, validateWith = FileValidator.class, converter = FileConverter.class) | |
22 | + private File inputFile; | |
23 | + | |
24 | + @Parameter(names = {"-output", "-o"}, description = "Output file path for summary", required = true, validateWith = FileValidator.class, converter = FileConverter.class) | |
25 | + private File outputFile; | |
26 | + | |
27 | + @Parameter(names = {"-target", "-t"}, description = "Target summary token count", required = true, validateWith = PositiveInteger.class) | |
28 | + private int targetTokenCount; | |
29 | + | |
30 | + private boolean invalid = false; | |
31 | + | |
32 | + boolean isHelp() { | |
33 | + return help; | |
34 | + } | |
35 | + | |
36 | + File getInputFile() { | |
37 | + return inputFile; | |
38 | + } | |
39 | + | |
40 | + File getOutputFile() { | |
41 | + return outputFile; | |
42 | + } | |
43 | + | |
44 | + int getTargetTokenCount() { | |
45 | + return targetTokenCount; | |
46 | + } | |
47 | + | |
48 | + @SuppressWarnings("squid:S1166") | |
49 | + static Cli parse(String[] args) { | |
50 | + Cli cli = new Cli(); | |
51 | + JCommander jCommander; | |
52 | + try { | |
53 | + jCommander = new JCommander(cli, args); | |
54 | + } catch (ParameterException ex) { | |
55 | + LOG.error("Error parsing parameters: {}", ex.getLocalizedMessage()); | |
56 | + cli.setInvalid(); | |
57 | + return cli; | |
58 | + } | |
59 | + if (cli.isHelp()) { | |
60 | + StringBuilder stringBuilder = new StringBuilder(); | |
61 | + jCommander.usage(stringBuilder); | |
62 | + LOG.info("{}", stringBuilder); | |
63 | + } | |
64 | + return cli; | |
65 | + } | |
66 | + | |
67 | + private void setInvalid() { | |
68 | + invalid = true; | |
69 | + } | |
70 | + | |
71 | + boolean isInvalid() { | |
72 | + return invalid; | |
73 | + } | |
74 | + | |
75 | + public static class FileValidator implements IParameterValidator { | |
76 | + | |
77 | + @Override | |
78 | + public void validate(String name, String value) { | |
79 | + File file = new File(value); | |
80 | + if (!file.isFile()) { | |
81 | + throw new ParameterException("Parameter " + name | |
82 | + + " should be a valid file path (found " + value + ")"); | |
83 | + } | |
84 | + } | |
85 | + | |
86 | + } | |
87 | +} | |
... | ... |
nicolas-cli/src/main/java/pl/waw/ipipan/zil/summ/nicolas/cli/Client.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.apache.commons.io.IOUtils; | |
4 | +import org.slf4j.Logger; | |
5 | +import org.slf4j.LoggerFactory; | |
6 | +import pl.waw.ipipan.zil.multiservice.thrift.types.MultiserviceException; | |
7 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
8 | +import pl.waw.ipipan.zil.summ.nicolas.Nicolas; | |
9 | +import pl.waw.ipipan.zil.summ.nicolas.NicolasException; | |
10 | +import pl.waw.ipipan.zil.summ.nicolas.common.Constants; | |
11 | +import pl.waw.ipipan.zil.summ.nicolas.multiservice.Preprocessor; | |
12 | + | |
13 | +import java.io.*; | |
14 | + | |
15 | +class Client { | |
16 | + | |
17 | + private static final Logger LOG = LoggerFactory.getLogger(Client.class); | |
18 | + | |
19 | + private final Preprocessor preprocessor; | |
20 | + private final Nicolas nicolas; | |
21 | + | |
22 | + Client(Preprocessor preprocessor, Nicolas nicolas) { | |
23 | + this.preprocessor = preprocessor; | |
24 | + this.nicolas = nicolas; | |
25 | + } | |
26 | + | |
27 | + @SuppressWarnings("squid:S1166") | |
28 | + void summarize(File inputFile, File outputFile, int targetTokenCount) { | |
29 | + try { | |
30 | + String inputText = loadInputText(inputFile); | |
31 | + TText preprocessed = preprocess(inputText); | |
32 | + String summary = summarize(preprocessed, targetTokenCount); | |
33 | + saveSummaryToFile(summary, outputFile); | |
34 | + } catch (IOException | MultiserviceException | NicolasException e) { | |
35 | + LOG.error("Exiting because of an error."); | |
36 | + } | |
37 | + } | |
38 | + | |
39 | + private String loadInputText(File inputFile) throws IOException { | |
40 | + String inputText; | |
41 | + try (FileInputStream inputStream = new FileInputStream(inputFile)) { | |
42 | + inputText = IOUtils.toString(inputStream, Constants.ENCODING); | |
43 | + } catch (IOException e) { | |
44 | + LOG.error("Error reading input text."); | |
45 | + throw e; | |
46 | + } | |
47 | + return inputText; | |
48 | + } | |
49 | + | |
50 | + private TText preprocess(String inputText) throws MultiserviceException { | |
51 | + try { | |
52 | + return preprocessor.preprocess(inputText); | |
53 | + } catch (MultiserviceException e) { | |
54 | + LOG.error("Error preprocessing input text."); | |
55 | + throw e; | |
56 | + } | |
57 | + } | |
58 | + | |
59 | + private String summarize(TText preprocessed, int targetTokenCount) throws NicolasException { | |
60 | + try { | |
61 | + return nicolas.summarizeThrift(preprocessed, targetTokenCount); | |
62 | + } catch (NicolasException e) { | |
63 | + LOG.error("Error preprocessing input text."); | |
64 | + throw e; | |
65 | + } | |
66 | + } | |
67 | + | |
68 | + private void saveSummaryToFile(String summary, File outputFile) throws IOException { | |
69 | + try (OutputStream outputStream = new FileOutputStream(outputFile)) { | |
70 | + IOUtils.write(summary, outputStream, Constants.ENCODING); | |
71 | + } catch (IOException e) { | |
72 | + LOG.error("Error writing file with summary."); | |
73 | + throw e; | |
74 | + } | |
75 | + } | |
76 | + | |
77 | +} | |
... | ... |
nicolas-cli/src/main/java/pl/waw/ipipan/zil/summ/nicolas/cli/Main.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.slf4j.Logger; | |
4 | +import org.slf4j.LoggerFactory; | |
5 | +import pl.waw.ipipan.zil.summ.nicolas.Nicolas; | |
6 | +import pl.waw.ipipan.zil.summ.nicolas.multiservice.Preprocessor; | |
7 | + | |
8 | +import java.io.IOException; | |
9 | + | |
10 | +public class Main { | |
11 | + | |
12 | + private static final Logger LOG = LoggerFactory.getLogger(Main.class); | |
13 | + | |
14 | + private Main() { | |
15 | + } | |
16 | + | |
17 | + @SuppressWarnings("squid:S1166") | |
18 | + public static void main(String[] args) { | |
19 | + Cli cli = Cli.parse(args); | |
20 | + if (cli.isHelp() || cli.isInvalid()) { | |
21 | + return; | |
22 | + } | |
23 | + | |
24 | + Nicolas nicolas; | |
25 | + Preprocessor preprocessor; | |
26 | + try { | |
27 | + nicolas = new Nicolas(); | |
28 | + preprocessor = new Preprocessor(); | |
29 | + } catch (IOException | ClassNotFoundException e) { | |
30 | + LOG.error("Error loading Nicolas or Multiservice preprocessor! Will exit."); | |
31 | + return; | |
32 | + } | |
33 | + Client client = new Client(preprocessor, nicolas); | |
34 | + client.summarize(cli.getInputFile(), cli.getOutputFile(), cli.getTargetTokenCount()); | |
35 | + } | |
36 | +} | |
... | ... |
nicolas-cli/src/test/java/pl/waw/ipipan/zil/summ/nicolas/cli/CliTest.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.junit.BeforeClass; | |
4 | +import org.junit.ClassRule; | |
5 | +import org.junit.Test; | |
6 | +import org.junit.rules.TemporaryFolder; | |
7 | + | |
8 | +import java.io.File; | |
9 | +import java.io.IOException; | |
10 | + | |
11 | +import static org.junit.Assert.*; | |
12 | + | |
13 | +public class CliTest { | |
14 | + | |
15 | + @ClassRule | |
16 | + public static TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); | |
17 | + | |
18 | + private static File sampleInputFile; | |
19 | + private static File sampleOutputFile; | |
20 | + private static final int TARGET_TOKEN_COUNT = 50; | |
21 | + private static final String INVALID_FILE_PATH = "nonexistent_dir/nonexistent_file"; | |
22 | + | |
23 | + @BeforeClass | |
24 | + public static void initSampleFiles() throws IOException { | |
25 | + sampleInputFile = TEMPORARY_FOLDER.newFile(); | |
26 | + sampleOutputFile = TEMPORARY_FOLDER.newFile(); | |
27 | + } | |
28 | + | |
29 | + @Test | |
30 | + public void failNoArguments() throws Exception { | |
31 | + String[] args = new String[]{}; | |
32 | + Cli cli = Cli.parse(args); | |
33 | + assertTrue(cli.isInvalid()); | |
34 | + } | |
35 | + | |
36 | + @Test | |
37 | + public void failInvalidArgument() throws Exception { | |
38 | + String[] args = new String[]{"-xxxx", "xxx", "-i", sampleInputFile.getPath(), "-o", sampleOutputFile.getPath(), "-t", Integer.toString(TARGET_TOKEN_COUNT)}; | |
39 | + Cli cli = Cli.parse(args); | |
40 | + assertTrue(cli.isInvalid()); | |
41 | + } | |
42 | + | |
43 | + @Test | |
44 | + public void failInvalidInputFile() throws Exception { | |
45 | + String[] args = new String[]{"-i", INVALID_FILE_PATH, "-o", sampleOutputFile.getPath(), "-t", Integer.toString(TARGET_TOKEN_COUNT)}; | |
46 | + Cli cli = Cli.parse(args); | |
47 | + assertTrue(cli.isInvalid()); | |
48 | + } | |
49 | + | |
50 | + @Test | |
51 | + public void failInvalidOutputFile() throws Exception { | |
52 | + String[] args = new String[]{"-i", sampleInputFile.getPath(), "-o", INVALID_FILE_PATH, "-t", Integer.toString(TARGET_TOKEN_COUNT)}; | |
53 | + Cli cli = Cli.parse(args); | |
54 | + assertTrue(cli.isInvalid()); | |
55 | + } | |
56 | + | |
57 | + @Test | |
58 | + public void failInvalidTargetTokenCount() throws Exception { | |
59 | + String[] args = new String[]{"-i", sampleInputFile.getPath(), "-o", sampleOutputFile.getPath(), "-t", Integer.toString(-1)}; | |
60 | + Cli cli = Cli.parse(args); | |
61 | + assertTrue(cli.isInvalid()); | |
62 | + } | |
63 | + | |
64 | + @Test | |
65 | + public void validArguments() throws Exception { | |
66 | + String[] args = new String[]{"-i", sampleInputFile.getPath(), "-o", sampleOutputFile.getPath(), "-t", Integer.toString(TARGET_TOKEN_COUNT)}; | |
67 | + Cli cli = Cli.parse(args); | |
68 | + assertFalse(cli.isInvalid()); | |
69 | + assertEquals(sampleInputFile, cli.getInputFile()); | |
70 | + assertEquals(sampleOutputFile, cli.getOutputFile()); | |
71 | + assertEquals(TARGET_TOKEN_COUNT, cli.getTargetTokenCount()); | |
72 | + } | |
73 | + | |
74 | + | |
75 | +} | |
... | ... |
nicolas-cli/src/test/java/pl/waw/ipipan/zil/summ/nicolas/cli/ClientTest.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.apache.commons.io.IOUtils; | |
4 | +import org.junit.ClassRule; | |
5 | +import org.junit.Test; | |
6 | +import org.junit.rules.TemporaryFolder; | |
7 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
8 | +import pl.waw.ipipan.zil.summ.nicolas.Nicolas; | |
9 | +import pl.waw.ipipan.zil.summ.nicolas.common.Constants; | |
10 | +import pl.waw.ipipan.zil.summ.nicolas.common.Utils; | |
11 | +import pl.waw.ipipan.zil.summ.nicolas.multiservice.Preprocessor; | |
12 | + | |
13 | +import java.io.File; | |
14 | +import java.io.FileInputStream; | |
15 | +import java.io.InputStream; | |
16 | + | |
17 | +import static org.junit.Assert.assertEquals; | |
18 | +import static org.mockito.ArgumentMatchers.*; | |
19 | +import static org.mockito.Mockito.mock; | |
20 | +import static org.mockito.Mockito.when; | |
21 | +import static pl.waw.ipipan.zil.summ.nicolas.cli.TestUtils.SAMPLE_INPUT_RESOURCE_PATH; | |
22 | +import static pl.waw.ipipan.zil.summ.nicolas.cli.TestUtils.SAMPLE_THRIFT_TEXT_RESOURCE_PATH; | |
23 | + | |
24 | +public class ClientTest { | |
25 | + | |
26 | + @ClassRule | |
27 | + public static TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); | |
28 | + | |
29 | + @Test | |
30 | + public void processSampleText() throws Exception { | |
31 | + Preprocessor preprocessor = mock(Preprocessor.class); | |
32 | + TText ttext = Utils.loadThriftTextFromResource(SAMPLE_THRIFT_TEXT_RESOURCE_PATH); | |
33 | + when(preprocessor.preprocess(any())).thenReturn(ttext); | |
34 | + | |
35 | + Nicolas nicolas = mock(Nicolas.class); | |
36 | + String targetSummary = "This is a summary"; | |
37 | + when(nicolas.summarizeThrift(eq(ttext), anyInt())).thenReturn(targetSummary); | |
38 | + | |
39 | + Client client = new Client(preprocessor, nicolas); | |
40 | + | |
41 | + File inputFile = TestUtils.copyResourceToFile(SAMPLE_INPUT_RESOURCE_PATH, TEMPORARY_FOLDER.newFile()); | |
42 | + File outputFile = TEMPORARY_FOLDER.newFile(); | |
43 | + int targetTokenCount = 50; | |
44 | + | |
45 | + String[] args = new String[]{"-i", inputFile.getPath(), "-o", outputFile.getPath(), "-t", Integer.toString(targetTokenCount)}; | |
46 | + Cli cli = Cli.parse(args); | |
47 | + client.summarize(cli.getInputFile(), cli.getOutputFile(), cli.getTargetTokenCount()); | |
48 | + | |
49 | + try (InputStream inputStream = new FileInputStream(outputFile)) { | |
50 | + String summary = IOUtils.toString(inputStream, Constants.ENCODING); | |
51 | + assertEquals(targetSummary, summary); | |
52 | + } | |
53 | + } | |
54 | +} | |
0 | 55 | \ No newline at end of file |
... | ... |
nicolas-cli/src/test/java/pl/waw/ipipan/zil/summ/nicolas/cli/MainIT.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.apache.commons.io.IOUtils; | |
4 | +import org.junit.ClassRule; | |
5 | +import org.junit.Test; | |
6 | +import org.junit.rules.TemporaryFolder; | |
7 | +import pl.waw.ipipan.zil.summ.nicolas.common.Constants; | |
8 | + | |
9 | +import java.io.File; | |
10 | +import java.io.FileInputStream; | |
11 | +import java.io.InputStream; | |
12 | + | |
13 | +import static junit.framework.TestCase.assertTrue; | |
14 | + | |
15 | +public class MainIT { | |
16 | + | |
17 | + private final static String SAMPLE_INPUT_RESOURCE_PATH = "/pl/waw/ipipan/zil/summ/nicolas/cli/sample_input.txt"; | |
18 | + | |
19 | + @ClassRule | |
20 | + public static TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); | |
21 | + | |
22 | + @Test | |
23 | + public void processSampleText() throws Exception { | |
24 | + File inputFile = TestUtils.copyResourceToFile(SAMPLE_INPUT_RESOURCE_PATH, TEMPORARY_FOLDER.newFile()); | |
25 | + File outputFile = TEMPORARY_FOLDER.newFile(); | |
26 | + int targetTokenCount = 50; | |
27 | + | |
28 | + String[] args = new String[]{"-i", inputFile.getPath(), "-o", outputFile.getPath(), "-t", Integer.toString(targetTokenCount)}; | |
29 | + Main.main(args); | |
30 | + | |
31 | + try (InputStream inputStream = new FileInputStream(outputFile)) { | |
32 | + String summary = IOUtils.toString(inputStream, Constants.ENCODING); | |
33 | + assertTrue(summary.length() > 0); | |
34 | + assertTrue(summary.length() < targetTokenCount * 10); | |
35 | + } | |
36 | + } | |
37 | + | |
38 | +} | |
0 | 39 | \ No newline at end of file |
... | ... |
nicolas-cli/src/test/java/pl/waw/ipipan/zil/summ/nicolas/cli/TestUtils.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.cli; | |
2 | + | |
3 | +import org.apache.commons.io.IOUtils; | |
4 | + | |
5 | +import java.io.*; | |
6 | + | |
7 | +class TestUtils { | |
8 | + | |
9 | + private static final String PACKAGE = "/pl/waw/ipipan/zil/summ/nicolas/cli/"; | |
10 | + | |
11 | + static final String SAMPLE_INPUT_RESOURCE_PATH = PACKAGE + "sample_input.txt"; | |
12 | + static final String SAMPLE_THRIFT_TEXT_RESOURCE_PATH = PACKAGE + "sample_input.thrift"; | |
13 | + | |
14 | + private TestUtils() { | |
15 | + } | |
16 | + | |
17 | + static File copyResourceToFile(String resourcePath, File file) throws IOException { | |
18 | + try (InputStream inputStream = MainIT.class.getResourceAsStream(resourcePath); | |
19 | + OutputStream outputStream = new FileOutputStream(file)) { | |
20 | + IOUtils.copy(inputStream, outputStream); | |
21 | + } | |
22 | + return file; | |
23 | + } | |
24 | +} | |
... | ... |
nicolas-cli/src/test/resources/pl/waw/ipipan/zil/summ/nicolas/cli/sample_input.thrift
0 → 100644
No preview for this file type
nicolas-cli/src/test/resources/pl/waw/ipipan/zil/summ/nicolas/cli/sample_input.txt
0 → 100644
1 | +To będzie już druga próba licytacji nieruchomości na pl. Słonecznym, którą urzędnicy wytropili po latach poszukiwań majątku Adama Gesslera. | |
2 | + | |
3 | +Jego dług wobec miasta szacują dziś na ok. 27 mln zł. Już w 1992 r., wkrótce po podpisaniu umowy najmu lokalu na Rynku Staromiejskim, zaczęły się problemy z czynszem. Sąd orzekł eksmisję. Dotąd miastu udało się odzyskać ledwie kilkadziesiąt tysięcy złotych długu. | |
4 | + | |
5 | +Sprawa budzi wielkie emocje, bo choć Adam Gessler jest słynnym restauratorem, oficjalnie nie ma nic. Nawet wynajęta przez Zakład Gospodarowania Nieruchomościami w Śródmieściu firma detektywistyczna nie znalazła majątku. | |
6 | + | |
7 | +Pozostają dwa mieszkania na Żoliborzu, wyceniane przed rokiem na blisko 4,3 mln zł. Będą licytowane za dwie trzecie ceny. W ZGN wymyślili, żeby miasto przystąpiło do licytacji. Jeśli uda się kupić nieruchomość, komornik pospłaca wierzycieli Adama i Piotra Gesslerów. A miasto będzie mogło w przyszłości sprzedać korzystnie atrakcyjny dom. | |
8 | + | |
9 | +Licytacje odbędą się w środę. - Korzyści z wylicytowania domu będą niewielkie w stosunku do ogromnego długu pana Gesslera. Chodzi jednak o to, żeby wiedział, że miasto nie zrezygnuje z upominania się o swoje - tłumaczyła "Gazecie" Małgorzata Mazur, dyrektorka ZGN. | |
... | ... |
nicolas-common/src/main/java/pl/waw/ipipan/zil/summ/nicolas/common/Utils.java
... | ... | @@ -45,17 +45,21 @@ public class Utils { |
45 | 45 | } |
46 | 46 | } |
47 | 47 | |
48 | + public static TText loadThriftTextFromStream(InputStream inputStream) throws IOException { | |
49 | + try (VersionIgnoringObjectInputStream ois = new VersionIgnoringObjectInputStream(inputStream)) { | |
50 | + return (TText) ois.readObject(); | |
51 | + } catch (ClassNotFoundException e) { | |
52 | + LOG.error("Error reading serialized thrift text file, class not found.", e); | |
53 | + throw new IOException(e); | |
54 | + } | |
55 | + } | |
56 | + | |
48 | 57 | public static TText loadThriftTextFromResource(String textResourcePath) throws IOException { |
49 | 58 | try (InputStream stream = Utils.class.getResourceAsStream(textResourcePath)) { |
50 | 59 | if (stream == null) { |
51 | 60 | throw new IOException("Resource not found at: " + textResourcePath); |
52 | 61 | } |
53 | - try (VersionIgnoringObjectInputStream ois = new VersionIgnoringObjectInputStream(stream)) { | |
54 | - return (TText) ois.readObject(); | |
55 | - } catch (ClassNotFoundException e) { | |
56 | - LOG.error("Error reading serialized thrift text file, class not found.", e); | |
57 | - throw new IOException(e); | |
58 | - } | |
62 | + return loadThriftTextFromStream(stream); | |
59 | 63 | } |
60 | 64 | } |
61 | 65 | |
... | ... |
nicolas-lib/src/main/java/pl/waw/ipipan/zil/summ/nicolas/Nicolas.java
... | ... | @@ -39,10 +39,13 @@ public class Nicolas { |
39 | 39 | zeroFeatureExtractor = new ZeroFeatureExtractor(); |
40 | 40 | } |
41 | 41 | |
42 | - public String summarizeThrift(TText text, int targetTokenCount) throws Exception { | |
43 | - Set<TMention> goodMentions | |
44 | - = MentionModel.detectGoodMentions(mentionModel, mentionFeatureExtractor, text); | |
45 | - return calculateSummary(text, goodMentions, targetTokenCount); | |
42 | + public String summarizeThrift(TText text, int targetTokenCount) throws NicolasException { | |
43 | + try { | |
44 | + Set<TMention> goodMentions = MentionModel.detectGoodMentions(mentionModel, mentionFeatureExtractor, text); | |
45 | + return calculateSummary(text, goodMentions, targetTokenCount); | |
46 | + } catch (Exception e) { | |
47 | + throw new NicolasException(e); | |
48 | + } | |
46 | 49 | } |
47 | 50 | |
48 | 51 | private String calculateSummary(TText thrifted, Set<TMention> goodMentions, int targetSize) throws Exception { |
... | ... |
nicolas-multiservice/pom.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | |
3 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
4 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
5 | + <parent> | |
6 | + <artifactId>nicolas-container</artifactId> | |
7 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
8 | + <version>1.0-SNAPSHOT</version> | |
9 | + </parent> | |
10 | + <modelVersion>4.0.0</modelVersion> | |
11 | + | |
12 | + <artifactId>nicolas-multiservice</artifactId> | |
13 | + | |
14 | + <dependencies> | |
15 | + <!-- internal --> | |
16 | + <dependency> | |
17 | + <groupId>pl.waw.ipipan.zil.multiservice</groupId> | |
18 | + <artifactId>utils</artifactId> | |
19 | + </dependency> | |
20 | + <dependency> | |
21 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
22 | + <artifactId>pscapi</artifactId> | |
23 | + </dependency> | |
24 | + | |
25 | + <!-- logging --> | |
26 | + <dependency> | |
27 | + <groupId>org.slf4j</groupId> | |
28 | + <artifactId>slf4j-api</artifactId> | |
29 | + </dependency> | |
30 | + | |
31 | + <!-- test --> | |
32 | + <dependency> | |
33 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
34 | + <artifactId>nicolas-common</artifactId> | |
35 | + <scope>test</scope> | |
36 | + </dependency> | |
37 | + | |
38 | + </dependencies> | |
39 | +</project> | |
0 | 40 | \ No newline at end of file |
... | ... |
nicolas-train/src/main/java/pl/waw/ipipan/zil/summ/nicolas/train/multiservice/MultiserviceProxy.java renamed to nicolas-multiservice/src/main/java/pl/waw/ipipan/zil/summ/nicolas/multiservice/MultiserviceProxy.java
1 | -package pl.waw.ipipan.zil.summ.nicolas.train.multiservice; | |
1 | +package pl.waw.ipipan.zil.summ.nicolas.multiservice; | |
2 | 2 | |
3 | 3 | import org.apache.thrift.TException; |
4 | 4 | import org.apache.thrift.protocol.TBinaryProtocol; |
... | ... | @@ -30,10 +30,10 @@ public class MultiserviceProxy { |
30 | 30 | public MultiserviceProxy(String host, int port) { |
31 | 31 | this.host = host; |
32 | 32 | this.port = port; |
33 | - LOG.info("Multiservice at " + host + ":" + port); | |
33 | + LOG.info("Multiservice at {}:{}", host, port); | |
34 | 34 | } |
35 | 35 | |
36 | - public TText process(String text, List<String> services) throws Exception { | |
36 | + public TText process(String text, List<String> services) throws MultiserviceException { | |
37 | 37 | List<Map<String, String>> options = new ArrayList<>(); |
38 | 38 | for (int i = 0; i < services.size(); i++) |
39 | 39 | options.add(new HashMap<>()); |
... | ... | @@ -41,7 +41,7 @@ public class MultiserviceProxy { |
41 | 41 | } |
42 | 42 | |
43 | 43 | public TText process(String text, String title, List<String> services, List<Map<String, String>> options) |
44 | - throws Exception { | |
44 | + throws MultiserviceException { | |
45 | 45 | TTransport transport = new TSocket(host, port); |
46 | 46 | ObjectRequest objectRequest = createRequest(text, title, services, options); |
47 | 47 | |
... | ... | @@ -51,7 +51,7 @@ public class MultiserviceProxy { |
51 | 51 | TProtocol protocol = new TBinaryProtocol(transport); |
52 | 52 | Multiservice.Client client = new Multiservice.Client(protocol); |
53 | 53 | |
54 | - LOG.debug("Sending Multservice request..."); | |
54 | + LOG.debug("Sending Multiservice request..."); | |
55 | 55 | TText responseText = request(objectRequest, client); |
56 | 56 | LOG.debug("...done"); |
57 | 57 | |
... | ... | @@ -59,7 +59,7 @@ public class MultiserviceProxy { |
59 | 59 | |
60 | 60 | } catch (TException e) { |
61 | 61 | LOG.error("Error processing request:" + e); |
62 | - throw new Exception(e); | |
62 | + throw new MultiserviceException(e.getMessage()); | |
63 | 63 | |
64 | 64 | } finally { |
65 | 65 | transport.close(); |
... | ... | @@ -72,15 +72,9 @@ public class MultiserviceProxy { |
72 | 72 | while (true) { |
73 | 73 | RequestStatus status = client.getRequestStatus(requestToken); |
74 | 74 | if (RequestStatus.DONE.equals(status)) { |
75 | - TText result = client.getResultObject(requestToken); | |
76 | - return result; | |
75 | + return client.getResultObject(requestToken); | |
77 | 76 | } else if (RequestStatus.FAILED.equals(status) || RequestStatus.DUMPED.equals(status)) { |
78 | - try { | |
79 | - MultiserviceException exception = client.getException(requestToken); | |
80 | - throw exception; | |
81 | - } catch (TException e) { | |
82 | - throw e; | |
83 | - } | |
77 | + throw client.getException(requestToken); | |
84 | 78 | } |
85 | 79 | } |
86 | 80 | } |
... | ... |
nicolas-multiservice/src/main/java/pl/waw/ipipan/zil/summ/nicolas/multiservice/Preprocessor.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.multiservice; | |
2 | + | |
3 | +import org.slf4j.Logger; | |
4 | +import org.slf4j.LoggerFactory; | |
5 | +import pl.waw.ipipan.zil.multiservice.thrift.types.MultiserviceException; | |
6 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
7 | + | |
8 | +import java.io.File; | |
9 | +import java.io.FileOutputStream; | |
10 | +import java.io.IOException; | |
11 | +import java.io.ObjectOutputStream; | |
12 | +import java.util.Arrays; | |
13 | +import java.util.List; | |
14 | + | |
15 | +public class Preprocessor { | |
16 | + | |
17 | + private static final Logger LOG = LoggerFactory.getLogger(Preprocessor.class); | |
18 | + | |
19 | + private static final List<String> SERVICES = Arrays.asList("Concraft", "Spejd", "Nerf", "MentionDetector", | |
20 | + "Bartek"); | |
21 | + private static final int PORT = 20000; | |
22 | + private static final String HOST = "multiservice.nlp.ipipan.waw.pl"; | |
23 | + | |
24 | + private static final MultiserviceProxy MS_PROXY = new MultiserviceProxy(HOST, PORT); | |
25 | + | |
26 | + public TText preprocess(String body) throws MultiserviceException { | |
27 | + return MS_PROXY.process(body, SERVICES); | |
28 | + } | |
29 | + | |
30 | + public void preprocessToFile(String body, File targetFile) throws MultiserviceException { | |
31 | + if (targetFile.exists()) { | |
32 | + LOG.debug("Skipping existing file.."); | |
33 | + return; | |
34 | + } | |
35 | + LOG.info("Processing text into " + targetFile.getPath()); | |
36 | + TText ttext = preprocess(body); | |
37 | + try { | |
38 | + serialize(ttext, targetFile); | |
39 | + } catch (IOException e) { | |
40 | + LOG.error("Error serializing preprocessed text", e); | |
41 | + throw new MultiserviceException(e.getLocalizedMessage()); | |
42 | + } | |
43 | + } | |
44 | + | |
45 | + private static void serialize(TText ttext, File targetFile) throws IOException { | |
46 | + try (FileOutputStream fileOutputStream = new FileOutputStream(targetFile); | |
47 | + ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream)) { | |
48 | + oos.writeObject(ttext); | |
49 | + } | |
50 | + } | |
51 | + | |
52 | +} | |
... | ... |
nicolas-multiservice/src/test/java/pl/waw/ipipan/zil/summ/nicolas/multiservice/PreprocessorIT.java
0 → 100644
1 | +package pl.waw.ipipan.zil.summ.nicolas.multiservice; | |
2 | + | |
3 | +import org.junit.BeforeClass; | |
4 | +import org.junit.ClassRule; | |
5 | +import org.junit.Test; | |
6 | +import org.junit.rules.TemporaryFolder; | |
7 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TParagraph; | |
8 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TSentence; | |
9 | +import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
10 | +import pl.waw.ipipan.zil.summ.nicolas.common.Utils; | |
11 | + | |
12 | +import java.io.File; | |
13 | +import java.io.FileInputStream; | |
14 | +import java.util.List; | |
15 | + | |
16 | +import static junit.framework.TestCase.assertEquals; | |
17 | +import static junit.framework.TestCase.assertTrue; | |
18 | + | |
19 | +public class PreprocessorIT { | |
20 | + | |
21 | + @ClassRule | |
22 | + public static TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); | |
23 | + | |
24 | + private static Preprocessor preprocessor; | |
25 | + | |
26 | + @BeforeClass | |
27 | + public static void initPreprocessor() { | |
28 | + preprocessor = new Preprocessor(); | |
29 | + } | |
30 | + | |
31 | + @Test | |
32 | + public void shouldProcessSampleText() throws Exception { | |
33 | + String text = "Ala ma kota. Ala ma też psa."; | |
34 | + TText processed = preprocessor.preprocess(text); | |
35 | + | |
36 | + assertSampleProcessedText(processed); | |
37 | + } | |
38 | + | |
39 | + private void assertSampleProcessedText(TText processed) { | |
40 | + assertEquals(2, processed.getParagraphsSize()); | |
41 | + | |
42 | + // first paragraph is empty (placeholder for text title) | |
43 | + TParagraph firstParagraph = processed.getParagraphs().get(0); | |
44 | + assertEquals(0, firstParagraph.getSentencesSize()); | |
45 | + | |
46 | + TParagraph secondParagraph = processed.getParagraphs().get(1); | |
47 | + assertEquals(2, secondParagraph.getSentencesSize()); | |
48 | + List<TSentence> sentences = secondParagraph.getSentences(); | |
49 | + | |
50 | + TSentence firstSentence = sentences.get(0); | |
51 | + assertEquals(4, firstSentence.getTokensSize()); | |
52 | + assertEquals("Ala", firstSentence.getTokens().get(0).getOrth()); | |
53 | + | |
54 | + TSentence secondSentence = sentences.get(1); | |
55 | + assertEquals(5, secondSentence.getTokensSize()); | |
56 | + assertEquals("Ala", secondSentence.getTokens().get(0).getOrth()); | |
57 | + | |
58 | + assertEquals(3, processed.getCoreferencesSize()); //Ala, pies, kot | |
59 | + } | |
60 | + | |
61 | + | |
62 | + @Test | |
63 | + public void shouldProcessSampleTextToFile() throws Exception { | |
64 | + String text = "Ala ma kota. Ala ma też psa."; | |
65 | + File targetFile = TEMPORARY_FOLDER.newFile(); | |
66 | + assertTrue(targetFile.delete()); //delete file, because preprocessor skips existing files | |
67 | + preprocessor.preprocessToFile(text, targetFile); | |
68 | + | |
69 | + try (FileInputStream inputStream = new FileInputStream(targetFile)) { | |
70 | + TText processed = Utils.loadThriftTextFromStream(inputStream); | |
71 | + assertSampleProcessedText(processed); | |
72 | + } | |
73 | + } | |
74 | +} | |
0 | 75 | \ No newline at end of file |
... | ... |
nicolas-train/pom.xml
... | ... | @@ -21,6 +21,10 @@ |
21 | 21 | <groupId>pl.waw.ipipan.zil.summ</groupId> |
22 | 22 | <artifactId>nicolas-lib</artifactId> |
23 | 23 | </dependency> |
24 | + <dependency> | |
25 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
26 | + <artifactId>nicolas-multiservice</artifactId> | |
27 | + </dependency> | |
24 | 28 | |
25 | 29 | <!-- internal --> |
26 | 30 | <dependency> |
... | ... |
nicolas-train/src/main/java/pl/waw/ipipan/zil/summ/nicolas/train/DownloadAndPreprocessCorpus.java
... | ... | @@ -4,7 +4,7 @@ import net.lingala.zip4j.core.ZipFile; |
4 | 4 | import org.apache.commons.io.FileUtils; |
5 | 5 | import org.slf4j.Logger; |
6 | 6 | import org.slf4j.LoggerFactory; |
7 | -import pl.waw.ipipan.zil.summ.nicolas.train.multiservice.NLPProcess; | |
7 | +import pl.waw.ipipan.zil.summ.nicolas.train.preprocess.Main; | |
8 | 8 | |
9 | 9 | import java.io.File; |
10 | 10 | import java.net.URL; |
... | ... | @@ -45,7 +45,7 @@ public class DownloadAndPreprocessCorpus { |
45 | 45 | |
46 | 46 | File preprocessed = new File(WORKING_DIR, "preprocessed"); |
47 | 47 | createFolder(preprocessed.getPath()); |
48 | - NLPProcess.main(new String[]{dataDir.getPath(), preprocessed.getPath()}); | |
48 | + Main.main(new String[]{dataDir.getPath(), preprocessed.getPath()}); | |
49 | 49 | } |
50 | 50 | |
51 | 51 | private static File createFolder(String path) { |
... | ... |
nicolas-train/src/main/java/pl/waw/ipipan/zil/summ/nicolas/train/multiservice/NLPProcess.java renamed to nicolas-train/src/main/java/pl/waw/ipipan/zil/summ/nicolas/train/preprocess/Main.java
1 | -package pl.waw.ipipan.zil.summ.nicolas.train.multiservice; | |
1 | +package pl.waw.ipipan.zil.summ.nicolas.train.preprocess; | |
2 | 2 | |
3 | 3 | import org.slf4j.Logger; |
4 | 4 | import org.slf4j.LoggerFactory; |
5 | -import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
5 | +import pl.waw.ipipan.zil.summ.nicolas.multiservice.Preprocessor; | |
6 | 6 | import pl.waw.ipipan.zil.summ.pscapi.io.PSC_IO; |
7 | 7 | import pl.waw.ipipan.zil.summ.pscapi.xml.Text; |
8 | 8 | |
9 | 9 | import java.io.File; |
10 | -import java.io.FileOutputStream; | |
11 | -import java.io.IOException; | |
12 | -import java.io.ObjectOutputStream; | |
13 | 10 | import java.util.Arrays; |
14 | -import java.util.List; | |
15 | 11 | |
16 | -public class NLPProcess { | |
12 | +public class Main { | |
17 | 13 | |
18 | - private static final Logger LOG = LoggerFactory.getLogger(NLPProcess.class); | |
19 | - | |
20 | - private static final List<String> SERVICES = Arrays.asList("Concraft", "Spejd", "Nerf", "MentionDetector", | |
21 | - "Bartek"); | |
22 | - private static final int PORT = 20000; | |
23 | - private static final String HOST = "multiservice.nlp.ipipan.waw.pl"; | |
24 | - | |
25 | - private static final MultiserviceProxy MSPROXY = new MultiserviceProxy(HOST, PORT); | |
14 | + private static final Logger LOG = LoggerFactory.getLogger(Main.class); | |
26 | 15 | |
27 | 16 | private static final String CORPUS_FILE_SUFFIX = ".xml"; |
28 | 17 | private static final String OUTPUT_FILE_SUFFIX = ".thrift"; |
29 | 18 | |
30 | - private NLPProcess() { | |
19 | + private Main() { | |
31 | 20 | } |
32 | 21 | |
33 | 22 | public static void main(String[] args) { |
34 | 23 | if (args.length != 2) { |
35 | - LOG.error("Wrong usage! Try " + NLPProcess.class.getSimpleName() + " dirWithCorpusFiles targetDir"); | |
24 | + LOG.error("Wrong usage! Try " + Main.class.getSimpleName() + " dirWithCorpusFiles targetDir"); | |
36 | 25 | return; |
37 | 26 | } |
38 | 27 | File corpusDir = new File(args[0]); |
... | ... | @@ -54,11 +43,14 @@ public class NLPProcess { |
54 | 43 | return; |
55 | 44 | } |
56 | 45 | Arrays.sort(files); |
46 | + | |
47 | + Preprocessor processor = new Preprocessor(); | |
48 | + | |
57 | 49 | for (File file : files) { |
58 | 50 | try { |
59 | 51 | Text text = PSC_IO.readText(file); |
60 | 52 | File targetFile = new File(targetDir, file.getName().replaceFirst(CORPUS_FILE_SUFFIX + "$", OUTPUT_FILE_SUFFIX)); |
61 | - annotateNLP(text, targetFile); | |
53 | + processor.preprocessToFile(text.getBody(), targetFile); | |
62 | 54 | ok++; |
63 | 55 | } catch (Exception e) { |
64 | 56 | err++; |
... | ... | @@ -68,30 +60,4 @@ public class NLPProcess { |
68 | 60 | LOG.info("{} texts processed successfully.", ok); |
69 | 61 | LOG.info("{} texts with errors.", err); |
70 | 62 | } |
71 | - | |
72 | - private static void annotateNLP(Text text, File targetFile) throws Exception { | |
73 | - annotate(text.getBody(), targetFile); | |
74 | - } | |
75 | - | |
76 | - private static void annotate(String body, File targetFile) throws Exception { | |
77 | - if (targetFile.exists()) { | |
78 | - LOG.debug("Skipping existing file.."); | |
79 | - return; | |
80 | - } | |
81 | - LOG.info("Processing text into " + targetFile.getPath()); | |
82 | - TText ttext = MSPROXY.process(body, SERVICES); | |
83 | - serialize(ttext, targetFile); | |
84 | - } | |
85 | - | |
86 | - public static void serialize(TText ttext, File targetFile) throws IOException { | |
87 | - try (FileOutputStream fileOutputStream = new FileOutputStream(targetFile); | |
88 | - ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream)) { | |
89 | - oos.writeObject(ttext); | |
90 | - } | |
91 | - } | |
92 | - | |
93 | - public static TText annotate(String body) throws Exception { | |
94 | - return MSPROXY.process(body, SERVICES); | |
95 | - } | |
96 | - | |
97 | 63 | } |
... | ... |
nicolas-train/src/test/java/pl/waw/ipipan/zil/summ/nicolas/train/multiservice/NLPProcessIT.java deleted
1 | -package pl.waw.ipipan.zil.summ.nicolas.train.multiservice; | |
2 | - | |
3 | -import com.google.common.collect.Lists; | |
4 | -import org.junit.ClassRule; | |
5 | -import org.junit.Test; | |
6 | -import org.junit.rules.TemporaryFolder; | |
7 | -import pl.waw.ipipan.zil.multiservice.thrift.types.TSentence; | |
8 | -import pl.waw.ipipan.zil.multiservice.thrift.types.TText; | |
9 | - | |
10 | -import java.io.File; | |
11 | -import java.util.List; | |
12 | -import java.util.stream.Collectors; | |
13 | - | |
14 | -import static junit.framework.TestCase.assertEquals; | |
15 | - | |
16 | -public class NLPProcessIT { | |
17 | - | |
18 | - @ClassRule | |
19 | - public static TemporaryFolder TEMPORARY_FOLDER = new TemporaryFolder(); | |
20 | - | |
21 | - @Test | |
22 | - public void shouldProcessSampleText() throws Exception { | |
23 | - String text = "Ala ma kota. Ala ma też psa."; | |
24 | - TText processed = NLPProcess.annotate(text); | |
25 | - List<String> ids = processed.getParagraphs().stream().flatMap(p -> p.getSentences().stream()).map(TSentence::getId).collect(Collectors.toList()); | |
26 | - assertEquals(Lists.newArrayList("s-2.1", "s-2.2"), ids); | |
27 | - | |
28 | - File targetFile = TEMPORARY_FOLDER.newFile(); | |
29 | - NLPProcess.serialize(processed, targetFile); | |
30 | - } | |
31 | -} | |
32 | 0 | \ No newline at end of file |
pom.xml
... | ... | @@ -10,29 +10,34 @@ |
10 | 10 | |
11 | 11 | <packaging>pom</packaging> |
12 | 12 | |
13 | + | |
13 | 14 | <modules> |
14 | 15 | <module>nicolas-lib</module> |
15 | 16 | <module>nicolas-cli</module> |
16 | 17 | <module>nicolas-model</module> |
17 | 18 | <module>nicolas-train</module> |
18 | 19 | <module>nicolas-common</module> |
20 | + <module>nicolas-multiservice</module> | |
19 | 21 | </modules> |
20 | 22 | |
21 | 23 | <properties> |
22 | 24 | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
25 | + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |
23 | 26 | <java.version.build>1.8</java.version.build> |
24 | 27 | |
25 | 28 | <pscapi.version>1.0</pscapi.version> |
26 | 29 | <utils.version>1.0</utils.version> |
27 | 30 | |
28 | 31 | <commons-csv.version>1.4</commons-csv.version> |
29 | - <guava.version>20.0</guava.version> | |
32 | + <guava.version>21.0</guava.version> | |
30 | 33 | <weka-dev.version>3.9.1</weka-dev.version> |
31 | 34 | <commons-lang3.version>3.5</commons-lang3.version> |
32 | 35 | <commons-io.version>2.5</commons-io.version> |
33 | 36 | <slf4j-api.version>1.7.22</slf4j-api.version> |
34 | 37 | <junit.version>4.12</junit.version> |
35 | 38 | <zip4j.version>1.3.2</zip4j.version> |
39 | + <mockito-core.version>2.7.1</mockito-core.version> | |
40 | + <jcommander.version>1.60</jcommander.version> | |
36 | 41 | </properties> |
37 | 42 | |
38 | 43 | <prerequisites> |
... | ... | @@ -76,6 +81,11 @@ |
76 | 81 | <artifactId>nicolas-train</artifactId> |
77 | 82 | <version>${project.version}</version> |
78 | 83 | </dependency> |
84 | + <dependency> | |
85 | + <groupId>pl.waw.ipipan.zil.summ</groupId> | |
86 | + <artifactId>nicolas-multiservice</artifactId> | |
87 | + <version>${project.version}</version> | |
88 | + </dependency> | |
79 | 89 | |
80 | 90 | <!-- internal --> |
81 | 91 | <dependency> |
... | ... | @@ -126,6 +136,11 @@ |
126 | 136 | <artifactId>zip4j</artifactId> |
127 | 137 | <version>${zip4j.version}</version> |
128 | 138 | </dependency> |
139 | + <dependency> | |
140 | + <groupId>com.beust</groupId> | |
141 | + <artifactId>jcommander</artifactId> | |
142 | + <version>${jcommander.version}</version> | |
143 | + </dependency> | |
129 | 144 | |
130 | 145 | <!-- logging --> |
131 | 146 | <dependency> |
... | ... | @@ -144,20 +159,204 @@ |
144 | 159 | <groupId>junit</groupId> |
145 | 160 | <artifactId>junit</artifactId> |
146 | 161 | <version>${junit.version}</version> |
162 | + <scope>test</scope> | |
163 | + </dependency> | |
164 | + <dependency> | |
165 | + <groupId>org.mockito</groupId> | |
166 | + <artifactId>mockito-core</artifactId> | |
167 | + <version>${mockito-core.version}</version> | |
168 | + <scope>test</scope> | |
147 | 169 | </dependency> |
148 | 170 | </dependencies> |
149 | 171 | </dependencyManagement> |
150 | 172 | |
173 | + | |
151 | 174 | <build> |
175 | + <pluginManagement> | |
176 | + <plugins> | |
177 | + <plugin> | |
178 | + <groupId>org.apache.maven.plugins</groupId> | |
179 | + <artifactId>maven-jar-plugin</artifactId> | |
180 | + <version>3.0.2</version> | |
181 | + </plugin> | |
182 | + <plugin> | |
183 | + <groupId>org.apache.maven.plugins</groupId> | |
184 | + <artifactId>maven-resources-plugin</artifactId> | |
185 | + <version>3.0.1</version> | |
186 | + </plugin> | |
187 | + <plugin> | |
188 | + <groupId>org.apache.maven.plugins</groupId> | |
189 | + <artifactId>maven-clean-plugin</artifactId> | |
190 | + <version>3.0.0</version> | |
191 | + </plugin> | |
192 | + <plugin> | |
193 | + <groupId>org.apache.maven.plugins</groupId> | |
194 | + <artifactId>maven-site-plugin</artifactId> | |
195 | + <version>3.5.1</version> | |
196 | + </plugin> | |
197 | + <plugin> | |
198 | + <groupId>org.apache.maven.plugins</groupId> | |
199 | + <artifactId>maven-install-plugin</artifactId> | |
200 | + <version>2.5.2</version> | |
201 | + </plugin> | |
202 | + <plugin> | |
203 | + <groupId>org.apache.maven.plugins</groupId> | |
204 | + <artifactId>maven-deploy-plugin</artifactId> | |
205 | + <version>2.8.2</version> | |
206 | + </plugin> | |
207 | + <plugin> | |
208 | + <groupId>org.apache.maven.plugins</groupId> | |
209 | + <artifactId>maven-assembly-plugin</artifactId> | |
210 | + <version>2.6</version> | |
211 | + </plugin> | |
212 | + <plugin> | |
213 | + <groupId>org.apache.maven.plugins</groupId> | |
214 | + <artifactId>maven-compiler-plugin</artifactId> | |
215 | + <version>3.5.1</version> | |
216 | + <configuration> | |
217 | + <source>${java.version.build}</source> | |
218 | + <target>${java.version.build}</target> | |
219 | + </configuration> | |
220 | + </plugin> | |
221 | + <plugin> | |
222 | + <groupId>org.apache.maven.plugins</groupId> | |
223 | + <artifactId>maven-surefire-plugin</artifactId> | |
224 | + <version>2.19.1</version> | |
225 | + <configuration> | |
226 | + <!-- Sets the VM argument line used when unit tests are run. --> | |
227 | + <argLine>${surefireArgLine}</argLine> | |
228 | + <!-- Skips unit tests if the value of skip.unit.tests property is true --> | |
229 | + <skipTests>${skip.unit.tests}</skipTests> | |
230 | + <!-- Excludes integration tests when unit tests are run. --> | |
231 | + <excludes> | |
232 | + <exclude>**/IT*.java</exclude> | |
233 | + </excludes> | |
234 | + </configuration> | |
235 | + </plugin> | |
236 | + <plugin> | |
237 | + <groupId>org.apache.maven.plugins</groupId> | |
238 | + <artifactId>maven-failsafe-plugin</artifactId> | |
239 | + <version>2.19.1</version> | |
240 | + <executions> | |
241 | + <execution> | |
242 | + <id>integration-test</id> | |
243 | + <goals> | |
244 | + <goal>integration-test</goal> | |
245 | + <goal>verify</goal> | |
246 | + </goals> | |
247 | + <configuration> | |
248 | + <!-- Sets the VM argument line used when integration tests are run. --> | |
249 | + <argLine>${failsafeArgLine}</argLine> | |
250 | + <!-- | |
251 | + Skips integration tests if the value of skip.integration.tests property | |
252 | + is true | |
253 | + --> | |
254 | + <skipTests>${skip.integration.tests}</skipTests> | |
255 | + </configuration> | |
256 | + </execution> | |
257 | + <execution> | |
258 | + <id>verify</id> | |
259 | + <goals> | |
260 | + <goal>verify</goal> | |
261 | + </goals> | |
262 | + </execution> | |
263 | + </executions> | |
264 | + </plugin> | |
265 | + <plugin> | |
266 | + <groupId>org.jacoco</groupId> | |
267 | + <artifactId>jacoco-maven-plugin</artifactId> | |
268 | + <version>0.7.8</version> | |
269 | + <executions> | |
270 | + <!-- | |
271 | + Prepares the property pointing to the JaCoCo runtime agent which | |
272 | + is passed as VM argument when Maven the Surefire plugin is executed. | |
273 | + --> | |
274 | + <execution> | |
275 | + <id>pre-unit-test</id> | |
276 | + <goals> | |
277 | + <goal>prepare-agent</goal> | |
278 | + </goals> | |
279 | + <configuration> | |
280 | + <!-- Sets the path to the file which contains the execution data. --> | |
281 | + <destFile>${project.build.directory}/jacoco.exec</destFile> | |
282 | + <!-- | |
283 | + Sets the name of the property containing the settings | |
284 | + for JaCoCo runtime agent. | |
285 | + --> | |
286 | + <propertyName>surefireArgLine</propertyName> | |
287 | + </configuration> | |
288 | + </execution> | |
289 | + <!-- | |
290 | + Ensures that the code coverage report for unit tests is created after | |
291 | + unit tests have been run. | |
292 | + --> | |
293 | + <execution> | |
294 | + <id>post-unit-test</id> | |
295 | + <phase>test</phase> | |
296 | + <goals> | |
297 | + <goal>report</goal> | |
298 | + </goals> | |
299 | + <configuration> | |
300 | + <!-- Sets the path to the file which contains the execution data. --> | |
301 | + <dataFile>${project.build.directory}/jacoco.exec</dataFile> | |
302 | + <!-- Sets the output directory for the code coverage report. --> | |
303 | + <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory> | |
304 | + </configuration> | |
305 | + </execution> | |
306 | + | |
307 | + <!-- | |
308 | + Prepares the property pointing to the JaCoCo runtime agent which | |
309 | + is passed as VM argument when Maven the Failsafe plugin is executed. | |
310 | + --> | |
311 | + <execution> | |
312 | + <id>pre-integration-test</id> | |
313 | + <phase>pre-integration-test</phase> | |
314 | + <goals> | |
315 | + <goal>prepare-agent</goal> | |
316 | + </goals> | |
317 | + <configuration> | |
318 | + <!-- Sets the path to the file which contains the execution data. --> | |
319 | + <destFile>${project.build.directory}/jacoco-it.exec</destFile> | |
320 | + <!-- | |
321 | + Sets the name of the property containing the settings | |
322 | + for JaCoCo runtime agent. | |
323 | + --> | |
324 | + <propertyName>failsafeArgLine</propertyName> | |
325 | + </configuration> | |
326 | + </execution> | |
327 | + <!-- | |
328 | + Ensures that the code coverage report for integration tests after | |
329 | + integration tests have been run. | |
330 | + --> | |
331 | + <execution> | |
332 | + <id>post-integration-test</id> | |
333 | + <phase>post-integration-test</phase> | |
334 | + <goals> | |
335 | + <goal>report</goal> | |
336 | + </goals> | |
337 | + <configuration> | |
338 | + <!-- Sets the path to the file which contains the execution data. --> | |
339 | + <dataFile>${project.build.directory}/jacoco-it.exec</dataFile> | |
340 | + <!-- Sets the output directory for the code coverage report. --> | |
341 | + <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> | |
342 | + </configuration> | |
343 | + </execution> | |
344 | + </executions> | |
345 | + </plugin> | |
346 | + </plugins> | |
347 | + </pluginManagement> | |
152 | 348 | <plugins> |
153 | 349 | <plugin> |
154 | 350 | <groupId>org.apache.maven.plugins</groupId> |
155 | - <artifactId>maven-compiler-plugin</artifactId> | |
156 | - <version>3.5.1</version> | |
157 | - <configuration> | |
158 | - <source>${java.version.build}</source> | |
159 | - <target>${java.version.build}</target> | |
160 | - </configuration> | |
351 | + <artifactId>maven-failsafe-plugin</artifactId> | |
352 | + </plugin> | |
353 | + <plugin> | |
354 | + <groupId>org.apache.maven.plugins</groupId> | |
355 | + <artifactId>maven-surefire-plugin</artifactId> | |
356 | + </plugin> | |
357 | + <plugin> | |
358 | + <groupId>org.jacoco</groupId> | |
359 | + <artifactId>jacoco-maven-plugin</artifactId> | |
161 | 360 | </plugin> |
162 | 361 | </plugins> |
163 | 362 | </build> |
... | ... |