You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2022/10/04 14:36:12 UTC
[tika] 01/01: TIKA-3871 -- make checkstyle checks stricter
This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch TIKA-3871
in repository https://gitbox.apache.org/repos/asf/tika.git
commit 507931f4db8680ceaa78eb40af1a7218f78dedd6
Author: tallison <ta...@apache.org>
AuthorDate: Tue Oct 4 10:35:55 2022 -0400
TIKA-3871 -- make checkstyle checks stricter
---
.../tika/cli/TikaCLIBatchIntegrationTest.java | 2 +-
tika-bundles/tika-bundle-standard/pom.xml | 7 +-
.../test/java/org/apache/tika/bundle/BundleIT.java | 43 +--
.../src/test/resources/log4j.properties | 5 +-
.../tika/pipes/kafka/tests/TikaPipesKafkaTest.java | 66 ++--
.../resources/pipes-fork-server-custom-log4j2.xml | 4 +-
.../src/test/resources/tika-config-kafka.xml | 194 ++++++------
.../opensearch/tests/TikaPipesOpenSearchTest.java | 1 -
.../pipes/xsearch/tests/TikaPipesXSearchBase.java | 4 +-
.../pipes/solr/tests/TikaPipesSolr6ZkTest.java | 7 +-
.../pipes/solr/tests/TikaPipesSolr7ZkTest.java | 7 +-
.../pipes/solr/tests/TikaPipesSolr8ZkTest.java | 8 +-
.../pipes/solr/tests/TikaPipesSolr9ZkTest.java | 7 +-
.../pipes/solr/tests/TikaPipesSolrTestBase.java | 102 +++---
tika-java7/pom.xml | 5 +-
.../filetypedetector/TikaFileTypeDetector.java | 15 +-
.../apache/tika/filetypedetector/package-info.java | 2 +-
.../filetypedetector/TikaFileTypeDetectorTest.java | 30 +-
.../src/test/resources/test-documents/test.html | 7 +-
tika-parent/checkstyle.xml | 5 +
tika-parent/pom.xml | 3 +-
.../translate/impl/AbstractTranslator.java | 2 +-
.../language/translate/impl/CachedTranslator.java | 79 ++---
.../translate/impl/ExternalTranslator.java | 26 +-
.../language/translate/impl/GoogleTranslator.java | 40 ++-
.../translate/impl/JoshuaNetworkTranslator.java | 341 +++++++++++----------
.../language/translate/impl/Lingo24Translator.java | 42 +--
.../language/translate/impl/MarianTranslator.java | 139 +++++----
.../translate/impl/MicrosoftTranslator.java | 73 +++--
.../language/translate/impl/MosesTranslator.java | 39 +--
.../language/translate/impl/RTGTranslator.java | 53 ++--
.../language/translate/impl/YandexTranslator.java | 59 ++--
.../translate/impl/translator.google.properties | 1 +
.../translate/impl/translator.joshua.properties | 3 +-
.../translate/impl/translator.lingo24.properties | 1 +
.../translate/impl/translator.marian.properties | 1 +
.../translate/impl/translator.microsoft.properties | 1 +
.../translate/impl/translator.moses.properties | 3 +-
.../translate/impl/translator.yandex.properties | 1 +
.../translate/impl/CachedTranslatorTest.java | 20 +-
.../translate/impl/GoogleTranslatorTest.java | 105 +++----
.../translate/impl/Lingo24TranslatorTest.java | 9 +-
.../translate/impl/MarianTranslatorTest.java | 7 +-
.../translate/impl/MicrosoftTranslatorTest.java | 39 ++-
.../translate/impl/MosesTranslatorTest.java | 7 +-
.../language/translate/impl/RTGTranslatorTest.java | 11 +-
.../translate/impl/YandexTranslatorTest.java | 5 +-
.../main/java/org/apache/tika/xmp/XMPMetadata.java | 325 ++++++++++----------
.../apache/tika/xmp/convert/AbstractConverter.java | 130 ++++----
.../apache/tika/xmp/convert/GenericConverter.java | 58 ++--
.../tika/xmp/convert/ITikaToXMPConverter.java | 10 +-
.../tika/xmp/convert/MSOfficeBinaryConverter.java | 74 ++---
.../tika/xmp/convert/MSOfficeXMLConverter.java | 107 +++----
.../tika/xmp/convert/OpenDocumentConverter.java | 64 ++--
.../org/apache/tika/xmp/convert/RTFConverter.java | 49 +--
.../org/apache/tika/xmp/convert/TikaToXMP.java | 83 +++--
.../java/org/apache/tika/xmp/TikaToXMPTest.java | 168 +++++-----
.../java/org/apache/tika/xmp/XMPMetadataTest.java | 143 +++++----
58 files changed, 1424 insertions(+), 1418 deletions(-)
diff --git a/tika-app/src/test/java/org/apache/tika/cli/TikaCLIBatchIntegrationTest.java b/tika-app/src/test/java/org/apache/tika/cli/TikaCLIBatchIntegrationTest.java
index ee7749d88..b482db13e 100644
--- a/tika-app/src/test/java/org/apache/tika/cli/TikaCLIBatchIntegrationTest.java
+++ b/tika-app/src/test/java/org/apache/tika/cli/TikaCLIBatchIntegrationTest.java
@@ -98,7 +98,7 @@ public class TikaCLIBatchIntegrationTest {
String[] params = {
"-i", testInputDirForCommandLine,
"-o", tempOutputDirForCommandLine,
- "--config="+configFile.toAbsolutePath().toString()};
+ "--config=" + configFile.toAbsolutePath().toString() };
TikaCLI.main(params);
assertFileExists(tempOutputDir.resolve("bad_xml.xml.xml"));
assertFileExists(tempOutputDir.resolve("coffee.xls.xml"));
diff --git a/tika-bundles/tika-bundle-standard/pom.xml b/tika-bundles/tika-bundle-standard/pom.xml
index 81fb66a17..0529eab67 100644
--- a/tika-bundles/tika-bundle-standard/pom.xml
+++ b/tika-bundles/tika-bundle-standard/pom.xml
@@ -18,7 +18,8 @@
under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -40,6 +41,10 @@
from the tika-parsers component.
</description>
<url>https://tika.apache.org/</url>
+ <!-- pax doesn't yet work with junit4; checkstyle forbids junit4. -->
+ <properties>
+ <checkstyle.skip>true</checkstyle.skip>
+ </properties>
<dependencies>
<dependency>
diff --git a/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java b/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
index 2d04ac1f9..340b1ba17 100644
--- a/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
+++ b/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
@@ -41,9 +41,22 @@ import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
-
import javax.inject.Inject;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerMethod;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
import org.apache.tika.Tika;
import org.apache.tika.detect.DefaultDetector;
import org.apache.tika.detect.Detector;
@@ -62,19 +75,6 @@ import org.apache.tika.parser.Parser;
import org.apache.tika.parser.internal.Activator;
import org.apache.tika.parser.ocr.TesseractOCRParser;
import org.apache.tika.sax.BodyContentHandler;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
-import org.ops4j.pax.exam.spi.reactors.PerMethod;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerMethod.class)
@@ -94,8 +94,7 @@ public class BundleIT {
@Configuration
public Option[] configuration() throws IOException, URISyntaxException, ClassNotFoundException {
File base = new File(TARGET, "test-bundles");
- return options(
- systemPackages("javax.xml.bind"),
+ return options(systemPackages("javax.xml.bind"),
bundle(new File(base, "tika-core.jar").toURI().toURL().toString()),
//I couldn't find a way to get the build of bundle to work via imports
//for this one
@@ -105,8 +104,7 @@ public class BundleIT {
mavenBundle("org.ops4j.pax.logging", "pax-logging-api", "1.8.5"),
mavenBundle("org.ops4j.pax.logging", "pax-logging-service", "1.8.5"),
junitBundles(),
- bundle(new File(base, "tika-bundle-standard.jar").toURI().toURL().toString())
- );
+ bundle(new File(base, "tika-bundle-standard.jar").toURI().toURL().toString()));
}
@Test
@@ -276,7 +274,8 @@ public class BundleIT {
ParseContext context = new ParseContext();
context.set(Parser.class, parser);
- try (InputStream stream = TikaInputStream.get(Paths.get("src/test/resources/test-documents.zip"))) {
+ try (InputStream stream = TikaInputStream.get(
+ Paths.get("src/test/resources/test-documents.zip"))) {
parser.parse(stream, handler, new Metadata(), context);
}
@@ -311,7 +310,8 @@ public class BundleIT {
ParseContext context = new ParseContext();
context.set(Parser.class, parser);
- try (InputStream stream = TikaInputStream.get(Paths.get("src/test/resources/testPPT.pptx"))) {
+ try (InputStream stream = TikaInputStream.get(
+ Paths.get("src/test/resources/testPPT.pptx"))) {
parser.parse(stream, handler, new Metadata(), context);
}
@@ -350,7 +350,8 @@ public class BundleIT {
System.err.println("tika Exception " + f.getName());
e.printStackTrace();
}
- System.out.println(Arrays.asList(metadata.getValues(TikaCoreProperties.TIKA_PARSED_BY)));
+ System.out.println(
+ Arrays.asList(metadata.getValues(TikaCoreProperties.TIKA_PARSED_BY)));
}
}
diff --git a/tika-bundles/tika-bundle-standard/src/test/resources/log4j.properties b/tika-bundles/tika-bundle-standard/src/test/resources/log4j.properties
index 7d3b372cc..e695468ee 100644
--- a/tika-bundles/tika-bundle-standard/src/test/resources/log4j.properties
+++ b/tika-bundles/tika-bundle-standard/src/test/resources/log4j.properties
@@ -12,13 +12,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
#info,debug, error,fatal ...
log4j.rootLogger=info,stderr
-
#console
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
log4j.appender.stderr.Target=System.err
-
-log4j.appender.stderr.layout.ConversionPattern= %-5p %m%n
+log4j.appender.stderr.layout.ConversionPattern=%-5p %m%n
diff --git a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
index 6be1eb24f..c2edb8ac5 100644
--- a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
+++ b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
@@ -48,8 +48,6 @@ import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;
-import org.apache.tika.cli.TikaCLI;
-import org.apache.tika.pipes.HandlerConfig;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -61,6 +59,9 @@ import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.shaded.org.apache.commons.io.FileUtils;
import org.testcontainers.utility.DockerImageName;
+import org.apache.tika.cli.TikaCLI;
+import org.apache.tika.pipes.HandlerConfig;
+
/**
* Test will emit some documents into a Kafka "pipe_iterator_topic", then kafka pipe iterator will
* poll those documents and send them to tika pipes. Tika pipes will then use a file fetcher to fetch/parse, then
@@ -69,8 +70,6 @@ import org.testcontainers.utility.DockerImageName;
*/
@Testcontainers(disabledWithoutDocker = true)
public class TikaPipesKafkaTest {
- private static final Logger LOG = LoggerFactory.getLogger(TikaPipesKafkaTest.class);
-
public static final String PIPE_ITERATOR_TOPIC = "pipe_iterator_topic";
public static final String EMITTER_TOPIC = "emitter_topic";
/**
@@ -78,6 +77,7 @@ public class TikaPipesKafkaTest {
* emitter_topic and fail the test.
*/
public static final int WAIT_FOR_EMITTED_DOCS_TIMEOUT_MINUTES = 2;
+ private static final Logger LOG = LoggerFactory.getLogger(TikaPipesKafkaTest.class);
private final int numDocs = 42;
private final ObjectMapper objectMapper = new ObjectMapper();
@@ -85,6 +85,7 @@ public class TikaPipesKafkaTest {
private final File testFileFolder = new File("target", "test-files");
private final Set<String> waitingFor = new HashSet<>();
+ KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:6.2.1"));
private void createTestFiles() throws Exception {
if (testFileFolder.mkdirs()) {
@@ -98,8 +99,6 @@ public class TikaPipesKafkaTest {
}
}
- KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:6.2.1"));
-
@BeforeEach
public void before() {
kafka.start();
@@ -111,8 +110,7 @@ public class TikaPipesKafkaTest {
}
@Test
- public void testKafkaPipeIteratorAndEmitter()
- throws Exception {
+ public void testKafkaPipeIteratorAndEmitter() throws Exception {
createTestFiles();
File tikaConfigFile = new File("target", "ta.xml");
File log4jPropFile = new File("target", "tmp-log4j2.xml");
@@ -122,8 +120,7 @@ public class TikaPipesKafkaTest {
FileUtils.copyInputStreamToFile(is, log4jPropFile);
}
String tikaConfigTemplateXml;
- try (InputStream is = this.getClass()
- .getResourceAsStream("/tika-config-kafka.xml")) {
+ try (InputStream is = this.getClass().getResourceAsStream("/tika-config-kafka.xml")) {
assert is != null;
tikaConfigTemplateXml = IOUtils.toString(is, StandardCharsets.UTF_8);
}
@@ -131,14 +128,18 @@ public class TikaPipesKafkaTest {
Properties consumerProps = new Properties();
consumerProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers());
consumerProps.put("group.id", UUID.randomUUID().toString());
- consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
- consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
+ consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
+ StringDeserializer.class.getName());
+ consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
+ StringDeserializer.class.getName());
consumerProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
Properties producerProps = new Properties();
producerProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers());
- producerProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
- producerProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
+ producerProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
+ StringSerializer.class.getName());
+ producerProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
+ StringSerializer.class.getName());
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps);
LOG.info("Listening to EMITTER_TOPIC={}", EMITTER_TOPIC);
@@ -155,9 +156,9 @@ public class TikaPipesKafkaTest {
meta.put("path", nextFile.getAbsolutePath());
meta.put("totalSpace", nextFile.getTotalSpace());
try {
- producer.send(new ProducerRecord<>(PIPE_ITERATOR_TOPIC,
- nextFile.getAbsolutePath(),
- objectMapper.writeValueAsString(meta))).get();
+ producer.send(
+ new ProducerRecord<>(PIPE_ITERATOR_TOPIC, nextFile.getAbsolutePath(),
+ objectMapper.writeValueAsString(meta))).get();
LOG.info("Sent fetch request : {}", nextFile.getAbsolutePath());
++numSent;
} catch (Exception e) {
@@ -170,28 +171,31 @@ public class TikaPipesKafkaTest {
es.execute(() -> {
try {
String tikaConfigXml =
- createTikaConfigXml(tikaConfigFile, log4jPropFile, tikaConfigTemplateXml
- );
+ createTikaConfigXml(tikaConfigFile, log4jPropFile, tikaConfigTemplateXml);
FileUtils.writeStringToFile(tikaConfigFile, tikaConfigXml, StandardCharsets.UTF_8);
- TikaCLI.main(new String[] {"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
+ TikaCLI.main(new String[]{"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
} catch (Exception e) {
throw new RuntimeException(e);
}
});
- LOG.info("Tika pipes have been started. See if we can pull the response messages from the EMITTER_TOPIC={}", EMITTER_TOPIC);
+ LOG.info(
+ "Tika pipes have been started. See if we can pull the response messages from the EMITTER_TOPIC={}",
+ EMITTER_TOPIC);
Stopwatch stopwatch = Stopwatch.createStarted();
while (!waitingFor.isEmpty()) {
- assertFalse(
- stopwatch.elapsed(TimeUnit.MINUTES) > WAIT_FOR_EMITTED_DOCS_TIMEOUT_MINUTES,
- "Timed out after " + WAIT_FOR_EMITTED_DOCS_TIMEOUT_MINUTES + " minutes waiting for the emitted docs");
+ assertFalse(stopwatch.elapsed(TimeUnit.MINUTES) > WAIT_FOR_EMITTED_DOCS_TIMEOUT_MINUTES,
+ "Timed out after " + WAIT_FOR_EMITTED_DOCS_TIMEOUT_MINUTES +
+ " minutes waiting for the emitted docs");
try {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));
for (ConsumerRecord<String, String> record : records) {
String val = record.value();
- Map<String, Object> valMap = objectMapper.readValue(val, new TypeReference<Map<String, Object>>() {});
+ Map<String, Object> valMap =
+ objectMapper.readValue(val, new TypeReference<Map<String, Object>>() {
+ });
waitingFor.remove(FilenameUtils.getName(record.key()));
assertNotNull(valMap.get("content_s"));
assertNotNull(valMap.get("mime_s"));
@@ -210,11 +214,11 @@ public class TikaPipesKafkaTest {
private String createTikaConfigXml(File tikaConfigFile, File log4jPropFile,
String tikaConfigTemplateXml) {
return tikaConfigTemplateXml.replace("{TIKA_CONFIG}", tikaConfigFile.getAbsolutePath())
- .replace("{LOG4J_PROPERTIES_FILE}", log4jPropFile.getAbsolutePath())
- .replace("{PATH_TO_DOCS}", testFileFolder.getAbsolutePath())
- .replace("{PARSE_MODE}", HandlerConfig.PARSE_MODE.RMETA.name())
- .replace("{PIPE_ITERATOR_TOPIC}", PIPE_ITERATOR_TOPIC)
- .replace("{EMITTER_TOPIC}", EMITTER_TOPIC)
- .replace("{BOOTSTRAP_SERVERS}", kafka.getBootstrapServers());
+ .replace("{LOG4J_PROPERTIES_FILE}", log4jPropFile.getAbsolutePath())
+ .replace("{PATH_TO_DOCS}", testFileFolder.getAbsolutePath())
+ .replace("{PARSE_MODE}", HandlerConfig.PARSE_MODE.RMETA.name())
+ .replace("{PIPE_ITERATOR_TOPIC}", PIPE_ITERATOR_TOPIC)
+ .replace("{EMITTER_TOPIC}", EMITTER_TOPIC)
+ .replace("{BOOTSTRAP_SERVERS}", kafka.getBootstrapServers());
}
}
diff --git a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/pipes-fork-server-custom-log4j2.xml b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/pipes-fork-server-custom-log4j2.xml
index 5f946e6e5..f5e70eedb 100644
--- a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/pipes-fork-server-custom-log4j2.xml
+++ b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/pipes-fork-server-custom-log4j2.xml
@@ -21,12 +21,12 @@
<Appenders>
<Console name="console" target="SYSTEM_ERR">
<PatternLayout
- pattern="%-5p [%t] %d{HH:mm:ss,SSS} %c %m%n" />
+ pattern="%-5p [%t] %d{HH:mm:ss,SSS} %c %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
- <AppenderRef ref="console" />
+ <AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
diff --git a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
index f15faf262..68d517cbb 100644
--- a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
+++ b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
@@ -18,101 +18,101 @@
under the License.
-->
<properties>
- <parsers>
- <parser class="org.apache.tika.parser.DefaultParser">
- <parser-exclude class="org.apache.tika.parser.ocr.TesseractOCRParser"/>
- <parser-exclude class="org.apache.tika.parser.pdf.PDFParser"/>
- <parser-exclude class="org.apache.tika.parser.microsoft.ooxml.OOXMLParser"/>
- <parser-exclude class="org.apache.tika.parser.microsoft.OfficeParser"/>
- </parser>
- <parser class="org.apache.tika.parser.pdf.PDFParser">
- <params>
- <param name="extractActions" type="bool">true</param>
- <param name="checkExtractAccessPermissions" type="bool">true</param>
- </params>
- </parser>
- <parser class="org.apache.tika.parser.microsoft.ooxml.OOXMLParser">
- <params>
- <param name="includeDeletedContent" type="bool">true</param>
- <param name="includeMoveFromContent" type="bool">true</param>
- <param name="extractMacros" type="bool">true</param>
- </params>
- </parser>
- <parser class="org.apache.tika.parser.microsoft.OfficeParser">
- <params>
- <param name="extractMacros" type="bool">true</param>
- </params>
- </parser>
- </parsers>
- <metadataFilters>
- <!-- depending on the file format, some dates do not have a timezone. This
- filter arbitrarily assumes dates have a UTC timezone and will format all
- dates as yyyy-MM-dd'T'HH:mm:ss'Z' whether or not they actually have a timezone.
- -->
- <metadataFilter class="org.apache.tika.metadata.filter.DateNormalizingMetadataFilter"/>
- <metadataFilter class="org.apache.tika.metadata.filter.FieldNameMappingFilter">
- <params>
- <excludeUnmapped>true</excludeUnmapped>
- <mappings>
- <mapping from="X-TIKA:content" to="content_s"/>
- <mapping from="Content-Length" to="length_i"/>
- <mapping from="dc:creator" to="creators_ss"/>
- <mapping from="dc:title" to="title_s"/>
- <mapping from="Content-Type" to="mime_s"/>
- <mapping from="X-TIKA:EXCEPTION:container_exception" to="tika_exception_s"/>
- </mappings>
- </params>
- </metadataFilter>
- </metadataFilters>
- <async>
- <params>
- <maxForEmitBatchBytes>10000</maxForEmitBatchBytes>
- <emitMaxEstimatedBytes>100000</emitMaxEstimatedBytes>
- <emitWithinMillis>10</emitWithinMillis>
- <numEmitters>1</numEmitters>
- <numClients>1</numClients>
- <tikaConfig>{TIKA_CONFIG}</tikaConfig>
- <forkedJvmArgs>
- <arg>-Xmx1g</arg>
- <arg>-XX:ParallelGCThreads=2</arg>
- <arg>-XX:+ExitOnOutOfMemoryError</arg>
- <arg>-Dlog4j.configurationFile={LOG4J_PROPERTIES_FILE}</arg>
- </forkedJvmArgs>
- <timeoutMillis>60000</timeoutMillis>
- </params>
- </async>
- <fetchers>
- <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
- <params>
- <name>fsf</name>
- <basePath>{PATH_TO_DOCS}</basePath>
- </params>
- </fetcher>
- </fetchers>
- <emitters>
- <emitter class="org.apache.tika.pipes.emitter.kafka.KafkaEmitter">
- <params>
- <name>ke</name>
- <topic>{EMITTER_TOPIC}</topic>
- <bootstrapServers>{BOOTSTRAP_SERVERS}</bootstrapServers>
- </params>
- </emitter>
- <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
- <params>
- <name>fse</name>
- <basePath>/path/to/extracts</basePath>
- </params>
- </emitter>
- </emitters>
- <pipesIterator class="org.apache.tika.pipes.pipesiterator.kafka.KafkaPipesIterator">
- <params>
- <topic>{PIPE_ITERATOR_TOPIC}</topic>
- <bootstrapServers>{BOOTSTRAP_SERVERS}</bootstrapServers>
- <groupId>grpid</groupId>
- <autoOffsetReset>earliest</autoOffsetReset>
- <pollDelayMs>1000</pollDelayMs>
- <fetcherName>fsf</fetcherName>
- <emitterName>ke</emitterName>
- </params>
- </pipesIterator>
+ <parsers>
+ <parser class="org.apache.tika.parser.DefaultParser">
+ <parser-exclude class="org.apache.tika.parser.ocr.TesseractOCRParser"/>
+ <parser-exclude class="org.apache.tika.parser.pdf.PDFParser"/>
+ <parser-exclude class="org.apache.tika.parser.microsoft.ooxml.OOXMLParser"/>
+ <parser-exclude class="org.apache.tika.parser.microsoft.OfficeParser"/>
+ </parser>
+ <parser class="org.apache.tika.parser.pdf.PDFParser">
+ <params>
+ <param name="extractActions" type="bool">true</param>
+ <param name="checkExtractAccessPermissions" type="bool">true</param>
+ </params>
+ </parser>
+ <parser class="org.apache.tika.parser.microsoft.ooxml.OOXMLParser">
+ <params>
+ <param name="includeDeletedContent" type="bool">true</param>
+ <param name="includeMoveFromContent" type="bool">true</param>
+ <param name="extractMacros" type="bool">true</param>
+ </params>
+ </parser>
+ <parser class="org.apache.tika.parser.microsoft.OfficeParser">
+ <params>
+ <param name="extractMacros" type="bool">true</param>
+ </params>
+ </parser>
+ </parsers>
+ <metadataFilters>
+ <!-- depending on the file format, some dates do not have a timezone. This
+ filter arbitrarily assumes dates have a UTC timezone and will format all
+ dates as yyyy-MM-dd'T'HH:mm:ss'Z' whether or not they actually have a timezone.
+ -->
+ <metadataFilter class="org.apache.tika.metadata.filter.DateNormalizingMetadataFilter"/>
+ <metadataFilter class="org.apache.tika.metadata.filter.FieldNameMappingFilter">
+ <params>
+ <excludeUnmapped>true</excludeUnmapped>
+ <mappings>
+ <mapping from="X-TIKA:content" to="content_s"/>
+ <mapping from="Content-Length" to="length_i"/>
+ <mapping from="dc:creator" to="creators_ss"/>
+ <mapping from="dc:title" to="title_s"/>
+ <mapping from="Content-Type" to="mime_s"/>
+ <mapping from="X-TIKA:EXCEPTION:container_exception" to="tika_exception_s"/>
+ </mappings>
+ </params>
+ </metadataFilter>
+ </metadataFilters>
+ <async>
+ <params>
+ <maxForEmitBatchBytes>10000</maxForEmitBatchBytes>
+ <emitMaxEstimatedBytes>100000</emitMaxEstimatedBytes>
+ <emitWithinMillis>10</emitWithinMillis>
+ <numEmitters>1</numEmitters>
+ <numClients>1</numClients>
+ <tikaConfig>{TIKA_CONFIG}</tikaConfig>
+ <forkedJvmArgs>
+ <arg>-Xmx1g</arg>
+ <arg>-XX:ParallelGCThreads=2</arg>
+ <arg>-XX:+ExitOnOutOfMemoryError</arg>
+ <arg>-Dlog4j.configurationFile={LOG4J_PROPERTIES_FILE}</arg>
+ </forkedJvmArgs>
+ <timeoutMillis>60000</timeoutMillis>
+ </params>
+ </async>
+ <fetchers>
+ <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+ <params>
+ <name>fsf</name>
+ <basePath>{PATH_TO_DOCS}</basePath>
+ </params>
+ </fetcher>
+ </fetchers>
+ <emitters>
+ <emitter class="org.apache.tika.pipes.emitter.kafka.KafkaEmitter">
+ <params>
+ <name>ke</name>
+ <topic>{EMITTER_TOPIC}</topic>
+ <bootstrapServers>{BOOTSTRAP_SERVERS}</bootstrapServers>
+ </params>
+ </emitter>
+ <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+ <params>
+ <name>fse</name>
+ <basePath>/path/to/extracts</basePath>
+ </params>
+ </emitter>
+ </emitters>
+ <pipesIterator class="org.apache.tika.pipes.pipesiterator.kafka.KafkaPipesIterator">
+ <params>
+ <topic>{PIPE_ITERATOR_TOPIC}</topic>
+ <bootstrapServers>{BOOTSTRAP_SERVERS}</bootstrapServers>
+ <groupId>grpid</groupId>
+ <autoOffsetReset>earliest</autoOffsetReset>
+ <pollDelayMs>1000</pollDelayMs>
+ <fetcherName>fsf</fetcherName>
+ <emitterName>ke</emitterName>
+ </params>
+ </pipesIterator>
</properties>
\ No newline at end of file
diff --git a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/TikaPipesOpenSearchTest.java b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/TikaPipesOpenSearchTest.java
index 6c36c11c7..f7771be07 100644
--- a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/TikaPipesOpenSearchTest.java
+++ b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/TikaPipesOpenSearchTest.java
@@ -20,7 +20,6 @@ package org.apache.tika.pipes.opensearch.tests;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
-import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;
diff --git a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/xsearch/tests/TikaPipesXSearchBase.java b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/xsearch/tests/TikaPipesXSearchBase.java
index 7e5873b14..75b091943 100644
--- a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/xsearch/tests/TikaPipesXSearchBase.java
+++ b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/xsearch/tests/TikaPipesXSearchBase.java
@@ -37,7 +37,6 @@ import com.fasterxml.jackson.databind.JsonNode;
import org.apache.commons.io.IOUtils;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
@@ -149,8 +148,7 @@ public abstract class TikaPipesXSearchBase {
JsonResponse results = CLIENT.postJson(endpoint + "/_search", query);
assertEquals(200, results.getStatus());
- assertEquals(numHtmlDocs + 1,
- results.getJson().get("hits").get("total").get("value").asInt());
+ assertEquals(numHtmlDocs + 1, results.getJson().get("hits").get("total").get("value").asInt());
//now try match all
query = "{ " +
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr6ZkTest.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr6ZkTest.java
index 91cb6cd2d..221d1e277 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr6ZkTest.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr6ZkTest.java
@@ -16,7 +16,7 @@
*/
package org.apache.tika.pipes.solr.tests;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -28,8 +28,9 @@ public class TikaPipesSolr6ZkTest extends TikaPipesSolr6Test {
@BeforeAll
public static void setUp() {
- assumeTrue("zk test only works on linux (and not mac os x)",
- SystemUtils.IS_OS_UNIX && ! SystemUtils.IS_OS_MAC_OSX);
+ assumeTrue(
+ SystemUtils.IS_OS_UNIX && !SystemUtils.IS_OS_MAC_OSX,
+ "zk test only works on linux (and not mac os x)");
}
@Override
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr7ZkTest.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr7ZkTest.java
index 2ffea2221..875afe223 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr7ZkTest.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr7ZkTest.java
@@ -16,7 +16,7 @@
*/
package org.apache.tika.pipes.solr.tests;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -28,8 +28,9 @@ public class TikaPipesSolr7ZkTest extends TikaPipesSolr7Test {
@BeforeAll
public static void setUp() {
- assumeTrue("zk test only works on linux (and not mac os x)",
- SystemUtils.IS_OS_UNIX && ! SystemUtils.IS_OS_MAC_OSX);
+ assumeTrue(
+ SystemUtils.IS_OS_UNIX && !SystemUtils.IS_OS_MAC_OSX,
+ "zk test only works on linux (and not mac os x)");
}
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr8ZkTest.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr8ZkTest.java
index f689fbb2e..91293fe78 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr8ZkTest.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr8ZkTest.java
@@ -16,7 +16,7 @@
*/
package org.apache.tika.pipes.solr.tests;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.junit.jupiter.api.BeforeAll;
import org.testcontainers.junit.jupiter.Testcontainers;
@@ -28,8 +28,10 @@ public class TikaPipesSolr8ZkTest extends TikaPipesSolr8Test {
@BeforeAll
public static void setUp() {
- assumeTrue("zk test only works on linux (and not mac os x)",
- SystemUtils.IS_OS_UNIX && ! SystemUtils.IS_OS_MAC_OSX);
+ assumeTrue(
+ SystemUtils.IS_OS_UNIX && !SystemUtils.IS_OS_MAC_OSX,
+ "zk test only works on linux (and not mac os x)");
+
}
@Override
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9ZkTest.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9ZkTest.java
index 402a13e01..fa6571f39 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9ZkTest.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9ZkTest.java
@@ -16,7 +16,7 @@
*/
package org.apache.tika.pipes.solr.tests;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
@@ -30,8 +30,9 @@ public class TikaPipesSolr9ZkTest extends TikaPipesSolr9Test {
@BeforeAll
public static void setUp() {
- assumeTrue("zk test only works on linux (and not mac os x)",
- SystemUtils.IS_OS_UNIX && ! SystemUtils.IS_OS_MAC_OSX);
+ assumeTrue(
+ SystemUtils.IS_OS_UNIX && !SystemUtils.IS_OS_MAC_OSX,
+ "zk test only works on linux (and not mac os x)");
}
@Override
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
index c4c8be31d..640cfc45a 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
@@ -22,6 +22,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+
import org.apache.commons.io.IOUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
@@ -32,12 +33,7 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.LBHttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
-import org.apache.tika.cli.TikaCLI;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.solr.SolrEmitter;
-import org.apache.tika.utils.SystemUtils;
import org.jetbrains.annotations.NotNull;
-
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -47,6 +43,11 @@ import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.shaded.org.apache.commons.io.FileUtils;
import org.testcontainers.utility.DockerImageName;
+import org.apache.tika.cli.TikaCLI;
+import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.emitter.solr.SolrEmitter;
+import org.apache.tika.utils.SystemUtils;
+
public abstract class TikaPipesSolrTestBase {
@@ -61,37 +62,33 @@ public abstract class TikaPipesSolrTestBase {
private int zkPort;
private String solrEndpoint;
+ public TikaPipesSolrTestBase() {
+ try {
+ init();
+ } catch (InterruptedException e) {
+ //swallow
+ }
+ }
+
public abstract boolean useZk();
public abstract String getSolrImageName();
-
public boolean handlesParentChild() {
return true;
}
- public TikaPipesSolrTestBase() {
- try {
- init();
- } catch (InterruptedException e) {
-
- }
- }
-
private void init() throws InterruptedException {
if (SystemUtils.IS_OS_MAC_OSX || SystemUtils.IS_OS_VERSION_WSL) {
// Networking on these operating systems needs fixed ports and localhost to be passed for the SolrCloud
// with Zookeeper tests to succeed. This means stopping and starting needs
- solr =
- new FixedHostPortGenericContainer<>(DockerImageName.parse(getSolrImageName()).toString())
- .withFixedExposedPort(8983,8983)
- .withFixedExposedPort(9983,9983)
- .withCommand("-DzkRun -Dhost=localhost");
+ solr = new FixedHostPortGenericContainer<>(
+ DockerImageName.parse(getSolrImageName()).toString()).withFixedExposedPort(8983,
+ 8983).withFixedExposedPort(9983, 9983).withCommand("-DzkRun -Dhost=localhost");
} else {
- solr =
- new GenericContainer<>(DockerImageName.parse(getSolrImageName())).withExposedPorts(8983,
- 9983)
- .withCommand("-DzkRun");
+ solr = new GenericContainer<>(
+ DockerImageName.parse(getSolrImageName())).withExposedPorts(8983, 9983)
+ .withCommand("-DzkRun");
}
solr.start();
@@ -132,7 +129,8 @@ public abstract class TikaPipesSolrTestBase {
FileUtils.writeStringToFile(new File(testFileFolder, "test-" + i + ".html"),
"<html><body>" + bodyContent + "</body></html>", StandardCharsets.UTF_8);
}
- FileUtils.copyInputStreamToFile(this.getClass().getResourceAsStream("/embedded/embedded.docx"),
+ FileUtils.copyInputStreamToFile(
+ this.getClass().getResourceAsStream("/embedded/embedded.docx"),
new File(testFileFolder, "test-embedded.docx"));
}
@@ -170,32 +168,25 @@ public abstract class TikaPipesSolrTestBase {
try (CloseableHttpClient client = HttpClients.createMinimal()) {
HttpPost postAddRoot = new HttpPost(solrUrl + "/schema");
postAddRoot.setHeader("Content-Type", "application/json");
- postAddRoot.setEntity(new StringEntity("{\n" +
- " \"add-field\":{\n" +
- " \"name\":\"path\",\n" +
- " \"type\":\"string\",\n" +
- " \"indexed\":true,\n" +
- " \"stored\":true, \n" +
- " \"docValues\":false \n" +
- " }\n" +
- "}"));
+ postAddRoot.setEntity(new StringEntity(
+ "{\n" + " \"add-field\":{\n" + " \"name\":\"path\",\n" +
+ " \"type\":\"string\",\n" + " \"indexed\":true,\n" +
+ " \"stored\":true, \n" + " \"docValues\":false \n" + " }\n" +
+ "}"));
CloseableHttpResponse resp = client.execute(postAddRoot);
assertEquals(200, resp.getStatusLine().getStatusCode());
}
}
+
private void addSchemaFieldsForNestedDocs(String solrUrl) throws IOException {
try (CloseableHttpClient client = HttpClients.createMinimal()) {
HttpPost postAddRoot = new HttpPost(solrUrl + "/schema");
postAddRoot.setHeader("Content-Type", "application/json");
- postAddRoot.setEntity(new StringEntity("{\n" +
- " \"replace-field\":{\n" +
- " \"name\":\"_root_\",\n" +
- " \"type\":\"string\",\n" +
- " \"indexed\":true,\n" +
- " \"stored\":true, \n" +
- " \"docValues\":false \n" +
- " }\n" +
- "}"));
+ postAddRoot.setEntity(new StringEntity(
+ "{\n" + " \"replace-field\":{\n" + " \"name\":\"_root_\",\n" +
+ " \"type\":\"string\",\n" + " \"indexed\":true,\n" +
+ " \"stored\":true, \n" + " \"docValues\":false \n" + " }\n" +
+ "}"));
CloseableHttpResponse resp = client.execute(postAddRoot);
assertEquals(200, resp.getStatusLine().getStatusCode());
}
@@ -204,8 +195,7 @@ public abstract class TikaPipesSolrTestBase {
/**
* Runs a test using Solr Pipe Iterator, File Fetcher and Solr Emitter.
*/
- protected void runTikaAsyncSolrPipeIteratorFileFetcherSolrEmitter()
- throws Exception {
+ protected void runTikaAsyncSolrPipeIteratorFileFetcherSolrEmitter() throws Exception {
File tikaConfigFile = new File("target", "ta.xml");
File log4jPropFile = new File("target", "tmp-log4j2.xml");
try (InputStream is = this.getClass()
@@ -213,29 +203,27 @@ public abstract class TikaPipesSolrTestBase {
FileUtils.copyInputStreamToFile(is, log4jPropFile);
}
String tikaConfigTemplateXml;
- try (InputStream is = this.getClass()
- .getResourceAsStream("/tika-config-solr-urls.xml")) {
+ try (InputStream is = this.getClass().getResourceAsStream("/tika-config-solr-urls.xml")) {
tikaConfigTemplateXml = IOUtils.toString(is, StandardCharsets.UTF_8);
}
String tikaConfigXml =
createTikaConfigXml(useZk(), tikaConfigFile, log4jPropFile, tikaConfigTemplateXml,
- SolrEmitter.UpdateStrategy.ADD,
- SolrEmitter.AttachmentStrategy.PARENT_CHILD,
+ SolrEmitter.UpdateStrategy.ADD, SolrEmitter.AttachmentStrategy.PARENT_CHILD,
HandlerConfig.PARSE_MODE.RMETA);
FileUtils.writeStringToFile(tikaConfigFile, tikaConfigXml, StandardCharsets.UTF_8);
- TikaCLI.main(new String[] {"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
+ TikaCLI.main(new String[]{"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
try (SolrClient solrClient = new LBHttpSolrClient.Builder().withBaseSolrUrls(solrEndpoint)
.build()) {
solrClient.commit(collection, true, true);
- assertEquals(numDocs, solrClient
- .query(collection, new SolrQuery("mime_s:\"text/html; charset=ISO-8859-1\""))
- .getResults().getNumFound());
+ assertEquals(numDocs, solrClient.query(collection,
+ new SolrQuery("mime_s:\"text/html; charset=ISO-8859-1\"")).getResults()
+ .getNumFound());
assertEquals(numDocs,
solrClient.query(collection, new SolrQuery("content_s:*initial*")).getResults()
.getNumFound());
- if(handlesParentChild()) {
+ if (handlesParentChild()) {
assertEquals(3,
solrClient.query(collection, new SolrQuery("_root_:\"test-embedded.docx\""))
.getResults().getNumFound());
@@ -259,14 +247,14 @@ public abstract class TikaPipesSolrTestBase {
HandlerConfig.PARSE_MODE.RMETA);
FileUtils.writeStringToFile(tikaConfigFile, tikaConfigXml, StandardCharsets.UTF_8);
- TikaCLI.main(new String[] {"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
+ TikaCLI.main(new String[]{"-a", "--config=" + tikaConfigFile.getAbsolutePath()});
try (SolrClient solrClient = new LBHttpSolrClient.Builder().withBaseSolrUrls(solrEndpoint)
.build()) {
solrClient.commit(collection, true, true);
- assertEquals(numDocs, solrClient
- .query(collection, new SolrQuery("mime_s:\"text/html; charset=ISO-8859-1\""))
- .getResults().getNumFound());
+ assertEquals(numDocs, solrClient.query(collection,
+ new SolrQuery("mime_s:\"text/html; charset=ISO-8859-1\"")).getResults()
+ .getNumFound());
assertEquals(numDocs,
solrClient.query(collection, new SolrQuery("content_s:*updated*")).getResults()
.getNumFound());
diff --git a/tika-java7/pom.xml b/tika-java7/pom.xml
index 65dede2a1..c8f5af62d 100644
--- a/tika-java7/pom.xml
+++ b/tika-java7/pom.xml
@@ -19,7 +19,8 @@
under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
@@ -57,7 +58,7 @@
<Export-Package>
org.apache.tika.filetypedetector
</Export-Package>
- <Private-Package />
+ <Private-Package/>
</instructions>
</configuration>
</plugin>
diff --git a/tika-java7/src/main/java/org/apache/tika/filetypedetector/TikaFileTypeDetector.java b/tika-java7/src/main/java/org/apache/tika/filetypedetector/TikaFileTypeDetector.java
index c479ade03..8d31459b2 100644
--- a/tika-java7/src/main/java/org/apache/tika/filetypedetector/TikaFileTypeDetector.java
+++ b/tika-java7/src/main/java/org/apache/tika/filetypedetector/TikaFileTypeDetector.java
@@ -26,28 +26,29 @@ import org.apache.tika.mime.MimeTypes;
public class TikaFileTypeDetector extends FileTypeDetector {
private final Tika tika = new Tika();
-
+
public TikaFileTypeDetector() {
super();
}
-
+
@Override
public String probeContentType(Path path) throws IOException {
// Try to detect based on the file name only for efficiency
String fileNameDetect = tika.detect(path.toString());
- if(!fileNameDetect.equals(MimeTypes.OCTET_STREAM)) {
+ if (!fileNameDetect.equals(MimeTypes.OCTET_STREAM)) {
return fileNameDetect;
}
-
+
// Then check the file content if necessary
String fileContentDetect = tika.detect(path);
- if(!fileContentDetect.equals(MimeTypes.OCTET_STREAM)) {
+ if (!fileContentDetect.equals(MimeTypes.OCTET_STREAM)) {
return fileContentDetect;
}
-
+
// Specification says to return null if we could not
// conclusively determine the file type
return null;
}
-
+
}
+
diff --git a/tika-java7/src/main/java/org/apache/tika/filetypedetector/package-info.java b/tika-java7/src/main/java/org/apache/tika/filetypedetector/package-info.java
index 7a680f3b6..a7a82cd5a 100644
--- a/tika-java7/src/main/java/org/apache/tika/filetypedetector/package-info.java
+++ b/tika-java7/src/main/java/org/apache/tika/filetypedetector/package-info.java
@@ -19,4 +19,4 @@
* Tika Java-7 FileTypeDetector implementations.
*/
@aQute.bnd.annotation.Version("1.0.0")
-package org.apache.tika.filetypedetector;
\ No newline at end of file
+package org.apache.tika.filetypedetector;
diff --git a/tika-java7/src/test/java/org/apache/tika/filetypedetector/TikaFileTypeDetectorTest.java b/tika-java7/src/test/java/org/apache/tika/filetypedetector/TikaFileTypeDetectorTest.java
index b21b7b358..718894520 100644
--- a/tika-java7/src/test/java/org/apache/tika/filetypedetector/TikaFileTypeDetectorTest.java
+++ b/tika-java7/src/test/java/org/apache/tika/filetypedetector/TikaFileTypeDetectorTest.java
@@ -32,16 +32,14 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
public class TikaFileTypeDetectorTest {
-
- @TempDir
- public Path tempDir;
-
- private Path testDirectory = null;
-
+
private static final String TEST_CLASSPATH = "/test-documents/test.html";
private static final String TEST_HTML = "test.html";
private static final String TEST_UNRECOGNISED_EXTENSION = "test.unrecognisedextension";
-
+ @TempDir
+ public Path tempDir;
+ private Path testDirectory = null;
+
@BeforeEach
public void setUp() throws Exception {
testDirectory = tempDir;
@@ -53,36 +51,38 @@ public class TikaFileTypeDetectorTest {
Files.copy(is, testDirectory.resolve(TEST_UNRECOGNISED_EXTENSION));
}
}
-
+
@Test
public final void testDirectAccess() throws Exception {
- String contentType = new TikaFileTypeDetector().probeContentType(testDirectory.resolve(TEST_HTML));
+ String contentType =
+ new TikaFileTypeDetector().probeContentType(testDirectory.resolve(TEST_HTML));
assertNotNull(contentType);
assertEquals("text/html", contentType);
}
-
+
@Test
public final void testFilesProbeContentTypePathExtension() throws Exception {
String contentType = Files.probeContentType(testDirectory.resolve(TEST_HTML));
assertNotNull(contentType);
assertEquals("text/html", contentType);
}
-
+
@Test
public final void testFilesProbeContentTypePathUnrecognised() throws Exception {
- String contentType = Files.probeContentType(testDirectory.resolve(TEST_UNRECOGNISED_EXTENSION));
+ String contentType =
+ Files.probeContentType(testDirectory.resolve(TEST_UNRECOGNISED_EXTENSION));
assertNotNull(contentType);
assertEquals("text/html", contentType);
}
-
+
@Test
public final void testMetaInfServicesLoad() throws Exception {
ServiceLoader<FileTypeDetector> serviceLoader = ServiceLoader.load(FileTypeDetector.class);
-
+
Iterator<FileTypeDetector> iterator = serviceLoader.iterator();
assertTrue(iterator.hasNext());
boolean foundTika = false;
- while(iterator.hasNext()) {
+ while (iterator.hasNext()) {
FileTypeDetector fileTypeDetector = iterator.next();
assertNotNull(fileTypeDetector);
if (fileTypeDetector instanceof TikaFileTypeDetector) {
diff --git a/tika-java7/src/test/resources/test-documents/test.html b/tika-java7/src/test/resources/test-documents/test.html
index 763e23720..b0036e3d9 100644
--- a/tika-java7/src/test/resources/test-documents/test.html
+++ b/tika-java7/src/test/resources/test-documents/test.html
@@ -1,10 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>Hello World</title>
+ <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
+ <title>Hello World</title>
</head>
<body>
- <p>Hello World!<p/>
+<p>Hello World!
+<p/>
</body>
</html>
\ No newline at end of file
diff --git a/tika-parent/checkstyle.xml b/tika-parent/checkstyle.xml
index 94cc85507..f0d55ac9b 100644
--- a/tika-parent/checkstyle.xml
+++ b/tika-parent/checkstyle.xml
@@ -63,6 +63,11 @@
<module name="TreeWalker">
<!--<module name="FileContentsHolder"/>-->
+ <module name="IllegalImport">
+ <property name="regexp" value="true"/>
+ <!-- Reject any org.junit import that's not also org.junit.jupiter: -->
+ <property name="illegalClasses" value="^org\.junit\.(?!jupiter\.).+"/>
+ </module>
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
diff --git a/tika-parent/pom.xml b/tika-parent/pom.xml
index bb3c99ded..502969d10 100644
--- a/tika-parent/pom.xml
+++ b/tika-parent/pom.xml
@@ -997,6 +997,7 @@
</executions>
</plugin>
<plugin>
+ <!-- mvn validate -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${checkstyle.plugin.version}</version>
@@ -1013,12 +1014,12 @@
<phase>validate</phase>
<configuration>
<configLocation>checkstyle.xml</configLocation>
- <encoding>UTF-8</encoding>
<consoleOutput>false</consoleOutput>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<testSourceDirectories>${project.basedir}/src/test/java</testSourceDirectories>
<violationSeverity>warn</violationSeverity>
<failOnViolation>true</failOnViolation>
+ <failsOnError>true</failsOnError>
</configuration>
<goals>
<goal>check</goal>
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/AbstractTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/AbstractTranslator.java
index 4ed9908cf..e441ec3a3 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/AbstractTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/AbstractTranslator.java
@@ -29,5 +29,5 @@ public abstract class AbstractTranslator implements Translator {
protected LanguageResult detectLanguage(String text) throws IOException {
LanguageDetector detector = new OptimaizeLangDetector().loadModels();
return detector.detect(text);
- }
+ }
}
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/CachedTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/CachedTranslator.java
index 3e20e6c39..1356e5f55 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/CachedTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/CachedTranslator.java
@@ -20,12 +20,12 @@ package org.apache.tika.language.translate.impl;
import java.io.IOException;
import java.util.HashMap;
+import com.fasterxml.jackson.databind.util.LRUMap;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.language.detect.LanguageResult;
import org.apache.tika.language.translate.Translator;
-import com.fasterxml.jackson.databind.util.LRUMap;
-
/**
* CachedTranslator. Saves a map of previous translations in order to prevent repetitive translation requests.
*/
@@ -37,12 +37,13 @@ public class CachedTranslator extends AbstractTranslator {
// Old entries are removed from the cache when it reaches its limit.
// For example, {en:fr -> {hello -> salut}}.
private HashMap<String, LRUMap<String, String>> cache;
-
+
/**
- * Create a new CachedTranslator (must set the {@link Translator} with {@link #setTranslator(Translator)} before use!)
+ * Create a new CachedTranslator (must set the {@link Translator} with
+ * {@link #setTranslator(Translator)} before use!)
*/
- public CachedTranslator(){
- this(null);
+ public CachedTranslator() {
+ this(null);
}
/**
@@ -57,25 +58,27 @@ public class CachedTranslator extends AbstractTranslator {
}
/**
- * @return the translator
- */
- public Translator getTranslator() {
- return translator;
- }
-
- /**
- * @param translator the translator to set
- */
- public void setTranslator(Translator translator) {
- this.translator = translator;
- }
-
- @Override
- public String translate(String text, String sourceLanguage, String targetLanguage) throws TikaException, IOException {
+ * @return the translator
+ */
+ public Translator getTranslator() {
+ return translator;
+ }
+
+ /**
+ * @param translator the translator to set
+ */
+ public void setTranslator(Translator translator) {
+ this.translator = translator;
+ }
+
+ @Override
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
if (translator == null) {
return text;
}
- LRUMap<String, String> translationCache = getTranslationCache(sourceLanguage, targetLanguage);
+ LRUMap<String, String> translationCache =
+ getTranslationCache(sourceLanguage, targetLanguage);
String translatedText = translationCache.get(text);
if (translatedText == null) {
translatedText = translator.translate(text, sourceLanguage, targetLanguage);
@@ -117,7 +120,8 @@ public class CachedTranslator extends AbstractTranslator {
* @since Tika 1.6
*/
public int getNumTranslationsFor(String sourceLanguage, String targetLanguage) {
- LRUMap<String, String> translationCache = cache.get(buildCacheKeyString(sourceLanguage, targetLanguage));
+ LRUMap<String, String> translationCache =
+ cache.get(buildCacheKeyString(sourceLanguage, targetLanguage));
if (translationCache == null) {
return 0;
} else {
@@ -129,13 +133,14 @@ public class CachedTranslator extends AbstractTranslator {
* Check whether this CachedTranslator's cache contains a translation of the text from the
* source language to the target language.
*
- * @param text What string to check for.
+ * @param text What string to check for.
* @param sourceLanguage The source language of translation.
* @param targetLanguage The target language of translation.
* @return true if the cache contains a translation of the text, false otherwise.
*/
public boolean contains(String text, String sourceLanguage, String targetLanguage) {
- LRUMap<String, String> translationCache = getTranslationCache(sourceLanguage, targetLanguage);
+ LRUMap<String, String> translationCache =
+ getTranslationCache(sourceLanguage, targetLanguage);
return translationCache.get(text) != null;
}
@@ -143,19 +148,19 @@ public class CachedTranslator extends AbstractTranslator {
* Check whether this CachedTranslator's cache contains a translation of the text to the target language,
* attempting to auto-detect the source language.
*
- * @param text What string to check for.
+ * @param text What string to check for.
* @param targetLanguage The target language of translation.
* @return true if the cache contains a translation of the text, false otherwise.
*/
public boolean contains(String text, String targetLanguage) {
- try {
- LanguageResult language = detectLanguage(text);
- String sourceLanguage = language.getLanguage();
- return contains(text, sourceLanguage, targetLanguage);
- } catch (IOException e) {
- // TODO what to do if we get an error?
- return false;
- }
+ try {
+ LanguageResult language = detectLanguage(text);
+ String sourceLanguage = language.getLanguage();
+ return contains(text, sourceLanguage, targetLanguage);
+ } catch (IOException e) {
+ // TODO what to do if we get an error?
+ return false;
+ }
}
/**
@@ -176,8 +181,10 @@ public class CachedTranslator extends AbstractTranslator {
* @param targetLanguage The target language of translation.
* @return The LRUMap representing the translation cache.
*/
- private LRUMap<String, String> getTranslationCache(String sourceLanguage, String targetLanguage) {
- LRUMap<String, String> translationCache = cache.get(buildCacheKeyString(sourceLanguage, targetLanguage));
+ private LRUMap<String, String> getTranslationCache(String sourceLanguage,
+ String targetLanguage) {
+ LRUMap<String, String> translationCache =
+ cache.get(buildCacheKeyString(sourceLanguage, targetLanguage));
if (translationCache == null) {
translationCache = new LRUMap<>(INITIAL_ENTRIES, MAX_ENTRIES);
cache.put(buildCacheKeyString(sourceLanguage, targetLanguage), translationCache);
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/ExternalTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/ExternalTranslator.java
index 57e697854..ba9d376a9 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/ExternalTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/ExternalTranslator.java
@@ -30,7 +30,6 @@ import org.apache.tika.exception.TikaException;
* Abstract class used to interact with command line/external Translators.
*
* @see MosesTranslator for an example of extending this class.
- *
* @since Tika 1.7
*/
public abstract class ExternalTranslator extends AbstractTranslator {
@@ -38,16 +37,18 @@ public abstract class ExternalTranslator extends AbstractTranslator {
/**
* Run the given command and return the output written to standard out.
*
- * @param command The complete command to run.
- * @param env The environment to pass along to the Runtime.
+ * @param command The complete command to run.
+ * @param env The environment to pass along to the Runtime.
* @param workingDirectory The directory from which to run the command.
* @return The output of the command written to standard out.
* @throws IOException
* @throws InterruptedException
*/
- public Reader runAndGetOutput(String command, String[] env, File workingDirectory) throws IOException, InterruptedException {
+ public Reader runAndGetOutput(String command, String[] env, File workingDirectory)
+ throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(command, env, workingDirectory);
- InputStreamReader reader = new InputStreamReader(process.getInputStream(), Charset.defaultCharset());
+ InputStreamReader reader =
+ new InputStreamReader(process.getInputStream(), Charset.defaultCharset());
BufferedReader bufferedReader = new BufferedReader(reader);
process.waitFor();
return bufferedReader;
@@ -55,11 +56,11 @@ public abstract class ExternalTranslator extends AbstractTranslator {
/**
* Checks to see if the command can be run. Typically used with
- * something like "myapp --version" to check to see if "myapp"
- * is installed and on the path.
+ * something like "myapp --version" to check to see if "myapp"
+ * is installed and on the path.
*
* @param checkCommandString The command to run and check the return code of.
- * @param successCodes Return codes that signify success.
+ * @param successCodes Return codes that signify success.
*/
public boolean checkCommand(String checkCommandString, int... successCodes) {
try {
@@ -67,10 +68,12 @@ public abstract class ExternalTranslator extends AbstractTranslator {
process.waitFor();
int result = process.waitFor();
for (int code : successCodes) {
- if (code == result) return true;
+ if (code == result) {
+ return true;
+ }
}
return false;
- } catch(IOException e) {
+ } catch (IOException e) {
// Some problem, command is there or is broken
System.err.println("Broken pipe");
return false;
@@ -83,7 +86,8 @@ public abstract class ExternalTranslator extends AbstractTranslator {
/**
* Default translate method which uses built Tika language identification.
- * @param text The text to translate.
+ *
+ * @param text The text to translate.
* @param targetLanguage The desired language to translate to (for example, "hi").
* @return The translated text.
* @throws Exception
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/GoogleTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/GoogleTranslator.java
index 0ad75dc96..6f5ea198b 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/GoogleTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/GoogleTranslator.java
@@ -27,14 +27,14 @@ import java.util.Properties;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.tika.exception.TikaException;
-
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.cxf.jaxrs.client.WebClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.tika.exception.TikaException;
+
/**
* An implementation of a REST client to the <a
* href="https://www.googleapis.com/language/translate/v2">Google Translate v2
@@ -42,14 +42,13 @@ import org.slf4j.LoggerFactory;
* href="http://hayageek.com/google-translate-api-tutorial/">great tutorial</a>
* from <a href="http://hayageek.com">hayageek.com</a>. Set your API key in
* translator.google.properties.
- *
- *
*/
public class GoogleTranslator extends AbstractTranslator {
private static final Logger LOG = LoggerFactory.getLogger(GoogleTranslator.class);
- private static final String GOOGLE_TRANSLATE_URL_BASE = "https://www.googleapis.com/language/translate/v2";
+ private static final String GOOGLE_TRANSLATE_URL_BASE =
+ "https://www.googleapis.com/language/translate/v2";
private static final String DEFAULT_KEY = "dummy-secret";
@@ -64,12 +63,11 @@ public class GoogleTranslator extends AbstractTranslator {
this.isAvailable = true;
Properties config = new Properties();
try {
- config.load(GoogleTranslator.class
- .getResourceAsStream(
- "translator.google.properties"));
+ config.load(GoogleTranslator.class.getResourceAsStream("translator.google.properties"));
this.apiKey = config.getProperty("translator.client-secret");
- if (this.apiKey.equals(DEFAULT_KEY))
+ if (this.apiKey.equals(DEFAULT_KEY)) {
this.isAvailable = false;
+ }
} catch (Exception e) {
LOG.warn("Exception reading config file", e);
isAvailable = false;
@@ -77,19 +75,19 @@ public class GoogleTranslator extends AbstractTranslator {
}
@Override
- public String translate(String text, String sourceLanguage,
- String targetLanguage) throws TikaException, IOException {
- if (!this.isAvailable)
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ if (!this.isAvailable) {
return text;
- Response response = client.accept(MediaType.APPLICATION_JSON)
- .query("key", apiKey).query("source", sourceLanguage)
- .query("target", targetLanguage).query("q", text).get();
+ }
+ Response response = client.accept(MediaType.APPLICATION_JSON).query("key", apiKey)
+ .query("source", sourceLanguage).query("target", targetLanguage).query("q", text)
+ .get();
StringBuilder responseText = new StringBuilder();
try (InputStreamReader inputStreamReader = new InputStreamReader(
(InputStream) response.getEntity(), UTF_8);
- BufferedReader reader = new BufferedReader(inputStreamReader);
- ) {
+ BufferedReader reader = new BufferedReader(inputStreamReader)) {
String line;
while ((line = reader.readLine()) != null) {
responseText.append(line);
@@ -102,10 +100,10 @@ public class GoogleTranslator extends AbstractTranslator {
}
@Override
- public String translate(String text, String targetLanguage)
- throws TikaException, IOException {
- if (!this.isAvailable)
+ public String translate(String text, String targetLanguage) throws TikaException, IOException {
+ if (!this.isAvailable) {
return text;
+ }
String sourceLanguage = detectLanguage(text).getLanguage();
return translate(text, sourceLanguage, targetLanguage);
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/JoshuaNetworkTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/JoshuaNetworkTranslator.java
index cfa8fba7b..bf391df51 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/JoshuaNetworkTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/JoshuaNetworkTranslator.java
@@ -28,30 +28,29 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
-
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.tika.exception.TikaException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.tika.exception.TikaException;
/**
* <p>This translator is designed to work with a TCP-IP available
* Joshua translation server, specifically the
* <a href="https://github.com/joshua-decoder/joshua_translation_engine">
* REST-based Joshua server</a>.</p>
- *
+ *
* <p>If you were to interact with the server via curl a request
* would look as follows</p>
- *
+ *
* <pre>
* {code
* curl http://localhost:5000/joshua/translate/english \
@@ -59,177 +58,185 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
* -X POST -d '{"inputLanguage": "Spanish", "inputText": "vuelo"}' -v
* }
* </pre>
- *
+ * <p>
* Joshua requires input to be pre-formatted into sentences, one per line,
* so this translation implementation takes care of that.
*/
public class JoshuaNetworkTranslator extends AbstractTranslator {
- private static final Logger LOG = LoggerFactory.getLogger(JoshuaNetworkTranslator.class);
-
- private static final String PROPERTIES_FILE = "translator.joshua.properties";
-
- private static final String JOSHUA_SERVER = "joshua.server.url";
-
- private String networkServer;
-
- private String networkURI;
-
- /**
- * Default constructor which first checks for the presence of
- * the <code>translator.joshua.properties</code> file.
- * We check if the remote server is available on each
- * translation process. This check is not a remote call, but instead
- * a check for null value within of a local variable represetning the
- * value for <code>joshua.server.url</code>, which should be populated
- * within the <code>translator.joshua.properties</code> file.
- */
- public JoshuaNetworkTranslator() {
- Properties props = new Properties();
- InputStream stream;
- stream = JoshuaNetworkTranslator.class.getResourceAsStream(PROPERTIES_FILE);
- try {
- if(stream != null) {
- props.load(stream);
- networkServer = props.getProperty(JOSHUA_SERVER);
- }
- } catch (IOException e) {
- LOG.error("An error occured whilst reading translator.joshua.properties file", e);
- }
- }
-
- /**
- * <p>Initially then check if the source language has been provided.
- * If no source language (or a null value) has been provided then
- * we make an attempt to guess the source using Tika's
- * {@link org.apache.tika.langdetect.OptimaizeLangDetector}. If we
- * are still unable to guess the language then we return the source
- * text.</p>
- *
- * <p>We then process the input text into a new string consisting of
- * sentences, one per line e.g. insert \n between the presence of '.'</p>
- *
- * @see org.apache.tika.language.translate.Translator#translate
- * (java.lang.String, java.lang.String, java.lang.String)
- */
- @Override
- public String translate(String text, String sourceLanguage,
- String targetLanguage) throws TikaException, IOException {
- //create networkURI
- if (!networkServer.endsWith("/")) {
- networkURI = networkServer + "/" + targetLanguage;
- } else {
- networkURI = networkServer + targetLanguage;
- }
- if (!this.isAvailable())
- return text;
-
- //make an attempt to guess language if one is not provided.
- if (sourceLanguage == null)
- sourceLanguage = detectLanguage(text).getLanguage();
-
- //process input text into sentences, one per line
- // e.g. insert \n between the presence of '.'
- StringBuilder sb = new StringBuilder(text);
- int i = 0;
- while ((i = sb.indexOf(".", i + 1)) != -1) {
- sb.replace(i, i + 1, "\n");
+ private static final Logger LOG = LoggerFactory.getLogger(JoshuaNetworkTranslator.class);
+
+ private static final String PROPERTIES_FILE = "translator.joshua.properties";
+
+ private static final String JOSHUA_SERVER = "joshua.server.url";
+
+ private String networkServer;
+
+ private String networkURI;
+
+ /**
+ * Default constructor which first checks for the presence of
+ * the <code>translator.joshua.properties</code> file.
+ * We check if the remote server is available on each
+ * translation process. This check is not a remote call, but instead
+ * a check for null value within of a local variable represetning the
+ * value for <code>joshua.server.url</code>, which should be populated
+ * within the <code>translator.joshua.properties</code> file.
+ */
+ public JoshuaNetworkTranslator() {
+ Properties props = new Properties();
+ InputStream stream;
+ stream = JoshuaNetworkTranslator.class.getResourceAsStream(PROPERTIES_FILE);
+ try {
+ if (stream != null) {
+ props.load(stream);
+ networkServer = props.getProperty(JOSHUA_SERVER);
+ }
+ } catch (IOException e) {
+ LOG.error("An error occured whilst reading translator.joshua.properties file", e);
+ }
}
- String inputText = sb.toString();
- WebClient client;
- final List<Object> providers = new ArrayList<>();
- JacksonJsonProvider jacksonJsonProvider = new JacksonJsonProvider();
- providers.add(jacksonJsonProvider);
-
- client = WebClient.create(networkURI, providers);
-
- ObjectMapper requestMapper = new ObjectMapper();
- ObjectNode jsonNode = requestMapper.createObjectNode();
- jsonNode.put("inputLanguage", sourceLanguage);
- jsonNode.put("inputText", inputText);
- //make the request
- Response response = client.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(jsonNode);
- StringBuilder responseText = new StringBuilder();
- try (InputStreamReader inputStreamReader = new InputStreamReader(
- (InputStream) response.getEntity(), UTF_8);
- BufferedReader reader = new BufferedReader(inputStreamReader);
- ) {
- String line;
- while ((line = reader.readLine()) != null) {
- responseText.append(line);
- }
+ /**
+ * <p>Initially then check if the source language has been provided.
+ * If no source language (or a null value) has been provided then
+ * we make an attempt to guess the source using Tika's
+ * {@link org.apache.tika.langdetect.OptimaizeLangDetector}. If we
+ * are still unable to guess the language then we return the source
+ * text.</p>
+ *
+ * <p>We then process the input text into a new string consisting of
+ * sentences, one per line e.g. insert \n between the presence of '.'</p>
+ *
+ * @see org.apache.tika.language.translate.Translator#translate
+ * (java.lang.String, java.lang.String, java.lang.String)
+ */
+ @Override
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ //create networkURI
+ if (!networkServer.endsWith("/")) {
+ networkURI = networkServer + "/" + targetLanguage;
+ } else {
+ networkURI = networkServer + targetLanguage;
+ }
+ if (!this.isAvailable()) {
+ return text;
+ }
+
+ //make an attempt to guess language if one is not provided.
+ if (sourceLanguage == null) {
+ sourceLanguage = detectLanguage(text).getLanguage();
+ }
+
+ //process input text into sentences, one per line
+ // e.g. insert \n between the presence of '.'
+ StringBuilder sb = new StringBuilder(text);
+ int i = 0;
+ while ((i = sb.indexOf(".", i + 1)) != -1) {
+ sb.replace(i, i + 1, "\n");
+ }
+
+ String inputText = sb.toString();
+ WebClient client;
+ final List<Object> providers = new ArrayList<>();
+ JacksonJsonProvider jacksonJsonProvider = new JacksonJsonProvider();
+ providers.add(jacksonJsonProvider);
+
+ client = WebClient.create(networkURI, providers);
+
+ ObjectMapper requestMapper = new ObjectMapper();
+ ObjectNode jsonNode = requestMapper.createObjectNode();
+ jsonNode.put("inputLanguage", sourceLanguage);
+ jsonNode.put("inputText", inputText);
+ //make the request
+ Response response =
+ client.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON)
+ .post(jsonNode);
+ StringBuilder responseText = new StringBuilder();
+ try (InputStreamReader inputStreamReader = new InputStreamReader(
+ (InputStream) response.getEntity(), UTF_8);
+ BufferedReader reader = new BufferedReader(inputStreamReader)) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ responseText.append(line);
+ }
+ }
+
+ try {
+ ObjectMapper responseMapper = new ObjectMapper();
+ JsonNode jsonResp = responseMapper.readTree(responseText.toString());
+
+ if (jsonResp.findValuesAsText("outputText") != null) {
+ return jsonResp.findValuesAsText("outputText").get(0);
+ } else {
+ throw new TikaException(jsonResp.findValue("message").get(0).asText());
+ }
+ } catch (JsonParseException e) {
+ throw new TikaException(
+ "Error requesting translation from '" + sourceLanguage + "' to '" +
+ targetLanguage + "', JSON response " +
+ "from Joshua REST Server is not well formatted: " +
+ responseText.toString());
+ }
}
- try {
- ObjectMapper responseMapper = new ObjectMapper();
- JsonNode jsonResp = responseMapper.readTree(responseText.toString());
-
- if (jsonResp.findValuesAsText("outputText") != null) {
- return jsonResp.findValuesAsText("outputText").get(0);
- } else {
- throw new TikaException(jsonResp.findValue("message").get(0).asText());
- }
- } catch (JsonParseException e) {
- throw new TikaException("Error requesting translation from '" +
- sourceLanguage + "' to '" + targetLanguage + "', JSON response "
- + "from Joshua REST Server is not well formatted: " + responseText.toString());
+ /**
+ * Make an attempt to guess the source language via
+ * {@link org.apache.tika.language.translate.AbstractTranslator#detectLanguage(String)}
+ * before making the call to
+ * {@link JoshuaNetworkTranslator#translate(String, String, String)}
+ *
+ * @see org.apache.tika.language.translate.Translator#translate(java.lang.String, java.lang.String)
+ */
+ @Override
+ public String translate(String text, String targetLanguage) throws TikaException, IOException {
+ if (isAvailable()) {
+ return text;
+ }
+ String sourceLanguage = detectLanguage(text).getLanguage();
+ return translate(text, sourceLanguage, targetLanguage);
}
- }
-
- /**
- * Make an attempt to guess the source language via
- * {@link org.apache.tika.language.translate.AbstractTranslator#detectLanguage(String)}
- * before making the call to
- * {@link JoshuaNetworkTranslator#translate(String, String, String)}
- * @see org.apache.tika.language.translate.Translator#translate(java.lang.String, java.lang.String)
- */
- @Override
- public String translate(String text, String targetLanguage)
- throws TikaException, IOException {
- if (isAvailable())
- return text;
- String sourceLanguage = detectLanguage(text).getLanguage();
- return translate(text, sourceLanguage, targetLanguage);
- }
-
- /**
- * @see org.apache.tika.language.translate.Translator#isAvailable()
- */
- @Override
- public boolean isAvailable() {
- if (this.networkServer!=null) {
- URL url = null;
- try {
- url = new URL(networkURI);
- } catch (MalformedURLException mue) {
- LOG.error("Error reading {} property from {}. {}", JOSHUA_SERVER, PROPERTIES_FILE, mue);
- }
- HttpURLConnection connection = null;
- try {
- if (url!=null) {
- connection = (HttpURLConnection) url.openConnection();
- connection.setRequestProperty("Connection", "close");
- connection.setConnectTimeout(2000); // Timeout 2 seconds
- connection.connect();
- return tryResponseCode(connection);
+
+ /**
+ * @see org.apache.tika.language.translate.Translator#isAvailable()
+ */
+ @Override
+ public boolean isAvailable() {
+ if (this.networkServer != null) {
+ URL url = null;
+ try {
+ url = new URL(networkURI);
+ } catch (MalformedURLException mue) {
+ LOG.error("Error reading {} property from {}. {}", JOSHUA_SERVER, PROPERTIES_FILE,
+ mue);
+ }
+ HttpURLConnection connection = null;
+ try {
+ if (url != null) {
+ connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestProperty("Connection", "close");
+ connection.setConnectTimeout(2000); // Timeout 2 seconds
+ connection.connect();
+ return tryResponseCode(connection);
+ }
+ } catch (IOException ioe) {
+ LOG.error("Error whilst checking availability of {}. {}", JOSHUA_SERVER, ioe);
+ }
}
- } catch (IOException ioe) {
- LOG.error("Error whilst checking availability of {}. {}", JOSHUA_SERVER, ioe);
- }
+ return false;
}
- return false;
- }
-
- private boolean tryResponseCode(HttpURLConnection connection) {
- // If the web service is available
- try {
- if (connection.getResponseCode() == 200)
- return true;
- } catch (IOException ioe) {
- LOG.error("Error retrieving response code from Joshua Network Translator.", ioe);
+
+ private boolean tryResponseCode(HttpURLConnection connection) {
+ // If the web service is available
+ try {
+ if (connection.getResponseCode() == 200) {
+ return true;
+ }
+ } catch (IOException ioe) {
+ LOG.error("Error retrieving response code from Joshua Network Translator.", ioe);
+ }
+ return false;
}
- return false;
- }
}
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/Lingo24Translator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/Lingo24Translator.java
index 1107e4e15..fcb32c87a 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/Lingo24Translator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/Lingo24Translator.java
@@ -24,18 +24,17 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
-
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.tika.exception.TikaException;
-
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.cxf.jaxrs.client.WebClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.tika.exception.TikaException;
+
/**
* An implementation of a REST client for the
* <a href="https://developer.lingo24.com/premium-machine-translation-api">Premium MT API v1</a>.
@@ -46,7 +45,8 @@ public class Lingo24Translator extends AbstractTranslator {
private static final Logger LOG = LoggerFactory.getLogger(Lingo24Translator.class);
- private static final String LINGO24_TRANSLATE_URL_BASE = "https://api.lingo24.com/mt/v1/translate";
+ private static final String LINGO24_TRANSLATE_URL_BASE =
+ "https://api.lingo24.com/mt/v1/translate";
private static final String DEFAULT_KEY = "dummy-key";
@@ -61,12 +61,12 @@ public class Lingo24Translator extends AbstractTranslator {
this.isAvailable = true;
Properties config = new Properties();
try {
- config.load(Lingo24Translator.class
- .getResourceAsStream(
- "translator.lingo24.properties"));
+ config.load(
+ Lingo24Translator.class.getResourceAsStream("translator.lingo24.properties"));
this.userKey = config.getProperty("translator.user-key");
- if (this.userKey.equals(DEFAULT_KEY))
+ if (this.userKey.equals(DEFAULT_KEY)) {
this.isAvailable = false;
+ }
} catch (Exception e) {
LOG.warn("Couldn't read config file", e);
isAvailable = false;
@@ -74,18 +74,18 @@ public class Lingo24Translator extends AbstractTranslator {
}
@Override
- public String translate(String text, String sourceLanguage,
- String targetLanguage) throws TikaException, IOException {
- if (!this.isAvailable)
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ if (!this.isAvailable) {
return text;
- Response response = client.accept(MediaType.APPLICATION_JSON)
- .query("user_key", userKey).query("source", sourceLanguage)
- .query("target", targetLanguage).query("q", text).get();
+ }
+ Response response = client.accept(MediaType.APPLICATION_JSON).query("user_key", userKey)
+ .query("source", sourceLanguage).query("target", targetLanguage).query("q", text)
+ .get();
StringBuilder responseText = new StringBuilder();
try (InputStreamReader inputStreamReader = new InputStreamReader(
(InputStream) response.getEntity(), UTF_8);
- BufferedReader reader = new BufferedReader(inputStreamReader);
- ) {
+ BufferedReader reader = new BufferedReader(inputStreamReader)) {
String line;
while ((line = reader.readLine()) != null) {
responseText.append(line);
@@ -102,11 +102,11 @@ public class Lingo24Translator extends AbstractTranslator {
}
@Override
- public String translate(String text, String targetLanguage)
- throws TikaException, IOException {
- if (!this.isAvailable)
+ public String translate(String text, String targetLanguage) throws TikaException, IOException {
+ if (!this.isAvailable) {
return text;
-
+ }
+
String sourceLanguage = detectLanguage(text).getLanguage();
return translate(text, sourceLanguage, targetLanguage);
}
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MarianTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MarianTranslator.java
index 143b6d467..88484b71d 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MarianTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MarianTranslator.java
@@ -18,20 +18,6 @@
package org.apache.tika.language.translate.impl;
-import jakarta.websocket.ClientEndpoint;
-import jakarta.websocket.ContainerProvider;
-import jakarta.websocket.DeploymentException;
-import jakarta.websocket.OnClose;
-import jakarta.websocket.OnMessage;
-import jakarta.websocket.OnOpen;
-import jakarta.websocket.Session;
-import jakarta.websocket.WebSocketContainer;
-import org.apache.commons.io.FileUtils;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.utils.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -49,10 +35,26 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import jakarta.websocket.ClientEndpoint;
+import jakarta.websocket.ContainerProvider;
+import jakarta.websocket.DeploymentException;
+import jakarta.websocket.OnClose;
+import jakarta.websocket.OnMessage;
+import jakarta.websocket.OnOpen;
+import jakarta.websocket.Session;
+import jakarta.websocket.WebSocketContainer;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.utils.StringUtils;
+
/**
* Translator that uses the Marian NMT decoder for translation.
- *
+ * <p>
* Users must install Marian NMT and configure model locations before using this Translator.
+ *
* @link https://marian-nmt.github.io/.
*/
public class MarianTranslator extends AbstractTranslator {
@@ -61,11 +63,10 @@ public class MarianTranslator extends AbstractTranslator {
private static final String DEFAULT_PATH = "dummy-path";
private static final String INPUT_TMP_NAME = "tika.marian.input";
private static final String OUTPUT_TMP_NAME = "tika.marian.translation";
- private long maxWaitForMarianServerResponse = 120000;
- private long pulseCheckMarianServerResponse = 1000;
-
private final String marianPath;
private final Properties config;
+ private long maxWaitForMarianServerResponse = 120000;
+ private long pulseCheckMarianServerResponse = 1000;
/**
* Default constructor.
@@ -76,12 +77,12 @@ public class MarianTranslator extends AbstractTranslator {
config.load(MarianTranslator.class.getResourceAsStream("translator.marian.properties"));
marianPath = config.getProperty("translator.marian.path", DEFAULT_PATH);
if (config.containsKey("translator.marian.server.responseTimeout")) {
- maxWaitForMarianServerResponse =
- Long.parseLong(config.getProperty("translator.marian.server.responseTimeout"));
+ maxWaitForMarianServerResponse = Long.parseLong(
+ config.getProperty("translator.marian.server.responseTimeout"));
}
if (config.containsKey("translator.marian.server.responsePulse")) {
- pulseCheckMarianServerResponse =
- Long.parseLong(config.getProperty("translator.marian.server.responsePulse"));
+ pulseCheckMarianServerResponse = Long.parseLong(
+ config.getProperty("translator.marian.server.responsePulse"));
}
} catch (IOException e) {
throw new AssertionError("Failed to read translator.marian.properties.");
@@ -91,11 +92,11 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Default translate method which uses built Tika language identification.
*
- * @param text The text to translate.
+ * @param text The text to translate.
* @param targetLanguage The desired language to translate to (for example, "hi").
* @return The translated text.
* @throws TikaException on any error performing translation.
- * @throws IOException on any I/O error performing translation.
+ * @throws IOException on any I/O error performing translation.
*/
public String translate(String text, String targetLanguage) throws TikaException, IOException {
String sourceLanguage = detectLanguage(text).getLanguage();
@@ -105,30 +106,34 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Translate method with specific source and target languages.
*
- * @param text The text to translate.
+ * @param text The text to translate.
* @param sourceLanguage The language to translate from (for example, "en").
* @param targetLanguage The desired language to translate to (for example, "hi").
* @return The translated text.
* @throws TikaException on any error performing translation.
- * @throws IOException on any I/O error performing translation.
+ * @throws IOException on any I/O error performing translation.
*/
- public String translate(String text, String sourceLanguage, String targetLanguage) throws TikaException, IOException {
- String configPath =
- config.getProperty("translator.marian." + sourceLanguage + "_" + targetLanguage + ".config");
- String serverSocket =
- config.getProperty("translator.marian." + sourceLanguage + "_" + targetLanguage + ".server");
-
- if (!isAvailable(sourceLanguage, targetLanguage)) return text;
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ String configPath = config.getProperty(
+ "translator.marian." + sourceLanguage + "_" + targetLanguage + ".config");
+ String serverSocket = config.getProperty(
+ "translator.marian." + sourceLanguage + "_" + targetLanguage + ".server");
+
+ if (!isAvailable(sourceLanguage, targetLanguage)) {
+ return text;
+ }
if (!StringUtils.isEmpty(configPath) && !StringUtils.isEmpty(serverSocket)) {
- LOG.info("Both local and server configurations exist for " + sourceLanguage + " to " + targetLanguage
- + "\nDefaulting to use local engine.");
+ LOG.info("Both local and server configurations exist for " + sourceLanguage + " to " +
+ targetLanguage + "\nDefaulting to use local engine.");
}
StringBuilder translation = new StringBuilder();
File tmpFile = Files.createTempFile(INPUT_TMP_NAME, ".tmp").toFile();
tmpFile.deleteOnExit();
- try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(tmpFile), Charset.defaultCharset())) {
+ try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(tmpFile),
+ Charset.defaultCharset())) {
out.append(text).append('\n').close();
}
File tmpTranslatedFile = Files.createTempFile(OUTPUT_TMP_NAME, ".tmp").toFile();
@@ -147,9 +152,9 @@ public class MarianTranslator extends AbstractTranslator {
String postProcessScript = config.getProperty("translator.marian.postprocess");
executeScript(postProcessScript, tmpTranslatedFile);
- BufferedReader fileReader
- = new BufferedReader(new InputStreamReader(
- new FileInputStream(tmpTranslatedFile), Charset.defaultCharset()));
+ BufferedReader fileReader = new BufferedReader(
+ new InputStreamReader(new FileInputStream(tmpTranslatedFile),
+ Charset.defaultCharset()));
fileReader.lines().forEach(translation::append);
fileReader.close();
@@ -157,7 +162,7 @@ public class MarianTranslator extends AbstractTranslator {
throw new TikaException("Failed perform translation", e);
}
- if (!tmpFile.delete() || !tmpTranslatedFile.delete()){
+ if (!tmpFile.delete() || !tmpTranslatedFile.delete()) {
throw new IOException("Failed to delete temporary files.");
}
@@ -167,10 +172,11 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Process the translation request using a local instance of Marian - i.e. either </i>marian-decoder</i>
* or <i>marian</i> command line applications.
+ *
* @param configPath the path of the configuaration to use.
* @param sourceFile the file containing the source text to read from.
* @param targetFile the file to write the translated text to.
- * @throws IOException on any I/O error.
+ * @throws IOException on any I/O error.
* @throws InterruptedException on any process error.
*/
private void processWithLocalMarian(String configPath, File sourceFile, File targetFile)
@@ -183,8 +189,8 @@ public class MarianTranslator extends AbstractTranslator {
Process process = builder.start();
process.waitFor();
- BufferedReader stdOutReader =
- new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.defaultCharset()));
+ BufferedReader stdOutReader = new BufferedReader(
+ new InputStreamReader(process.getInputStream(), Charset.defaultCharset()));
stdOutReader.lines().forEach(LOG::debug);
stdOutReader.close();
}
@@ -192,15 +198,19 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Process the translation request using a Marian-Server instance. Marian Server is Marian NMT's WebSocket
* based server application (<i>marian-server</i>.
- * @param serverURI the Web Socket URI of the Marian Server instance.
+ *
+ * @param serverURI the Web Socket URI of the Marian Server instance.
* @param sourceFile the file containing the source text to read from.
* @param targetFile the file to write the translated text to.
* @throws TikaException on any error translating via the server.
*/
- private void processWithMarianServer(String serverURI, File sourceFile, File targetFile) throws TikaException {
+ private void processWithMarianServer(String serverURI, File sourceFile, File targetFile)
+ throws TikaException {
try {
- MarianServerClient clientEndpoint = new MarianServerClient(new URI(serverURI), targetFile);
- clientEndpoint.translate(FileUtils.readFileToString(sourceFile, Charset.defaultCharset()));
+ MarianServerClient clientEndpoint =
+ new MarianServerClient(new URI(serverURI), targetFile);
+ clientEndpoint.translate(
+ FileUtils.readFileToString(sourceFile, Charset.defaultCharset()));
long start = System.currentTimeMillis();
long elapsed = System.currentTimeMillis() - start;
while (!clientEndpoint.receivedResponse && elapsed < maxWaitForMarianServerResponse) {
@@ -221,8 +231,8 @@ public class MarianTranslator extends AbstractTranslator {
* Executes a script taking the passed file as it's first argument.
*
* @param script the path to the script to execute
- * @param file the file to process
- * @throws IOException on any IO errors
+ * @param file the file to process
+ * @throws IOException on any IO errors
* @throws InterruptedException if the process fails.
*/
private void executeScript(String script, File file) throws IOException, InterruptedException {
@@ -244,12 +254,13 @@ public class MarianTranslator extends AbstractTranslator {
* Builds the Marian NMT Command for the configuration.
*
* @param configPath the path to the configuration file
- * @param input the input file location
- * @param output the output file location
- * @param device the device for inference (i.e. cpu or gpu)
+ * @param input the input file location
+ * @param output the output file location
+ * @param device the device for inference (i.e. cpu or gpu)
* @return the command to be executed.
*/
- private List<String> buildMarianCommand(String configPath, File input, File output, String device) {
+ private List<String> buildMarianCommand(String configPath, File input, File output,
+ String device) {
List<String> command = new ArrayList<>();
command.add(Paths.get(marianPath).toString());
command.add("-c");
@@ -272,17 +283,18 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Checks if the approproate Marian engine is available.
+ *
* @param sourceLanguage The language to translate from (for example, "en").
* @param targetLanguage The desired language to translate to (for example, "hi").
* @return
*/
public boolean isAvailable(String sourceLanguage, String targetLanguage) {
- String configPath =
- config.getProperty("translator.marian." + sourceLanguage + "_" + targetLanguage + ".config");
- String serverSocket =
- config.getProperty("translator.marian." + sourceLanguage + "_" + targetLanguage + ".server");
- return (!marianPath.equals(DEFAULT_PATH) && !StringUtils.isEmpty(configPath))
- || !StringUtils.isEmpty(serverSocket);
+ String configPath = config.getProperty(
+ "translator.marian." + sourceLanguage + "_" + targetLanguage + ".config");
+ String serverSocket = config.getProperty(
+ "translator.marian." + sourceLanguage + "_" + targetLanguage + ".server");
+ return (!marianPath.equals(DEFAULT_PATH) && !StringUtils.isEmpty(configPath)) ||
+ !StringUtils.isEmpty(serverSocket);
}
/**
@@ -297,8 +309,9 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Marian Server Web Socket Client.
+ *
* @param endpointURI the endpoint URI for the Marian Server instance.
- * @param file the location of the file to write the translation response to.
+ * @param file the location of the file to write the translation response to.
*/
public MarianServerClient(URI endpointURI, File file) throws TikaException {
try {
@@ -311,7 +324,7 @@ public class MarianTranslator extends AbstractTranslator {
}
@OnOpen
- public void onOpen(Session session){
+ public void onOpen(Session session) {
LOG.debug("Opened connection, Session ID: " + session.getId());
this.session = session;
}
@@ -324,13 +337,14 @@ public class MarianTranslator extends AbstractTranslator {
}
@OnClose
- public void onClose(Session session){
+ public void onClose(Session session) {
LOG.debug("Closed connection, Session ID: " + session.getId());
receivedResponse = true;
}
/**
* Translate the passed text using the Marian Server.
+ *
* @param sourceText the source text to translate.
* @throws IOException on any I/O error calling the server.
*/
@@ -340,6 +354,7 @@ public class MarianTranslator extends AbstractTranslator {
/**
* Close the connection to the Marian Server.
+ *
* @throws IOException on any I/O error calling the server.
*/
public void close() throws IOException {
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MicrosoftTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MicrosoftTranslator.java
index c8d92f60a..f6c9add8e 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MicrosoftTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MicrosoftTranslator.java
@@ -17,41 +17,41 @@
package org.apache.tika.language.translate.impl;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
import com.memetix.mst.language.Language;
import com.memetix.mst.translate.Translate;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.language.translate.Translator;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.language.translate.Translator;
/**
* Wrapper class to access the Windows translation service. This class uses the com.memetix.mst
* package as a wrapper for the API calls.
+ *
* @since Tika 1.6
*/
public class MicrosoftTranslator implements Translator {
- private static final Logger LOG = LoggerFactory.getLogger(MicrosoftTranslator.class);
-
- boolean available; // Flag for whether or not translation is available.
- String clientId, clientSecret; // Keys used for the API calls.
-
public static final String PROPERTIES_FILE = "translator.microsoft.properties";
public static final String ID_PROPERTY = "translator.client-id";
public static final String SECRET_PROPERTY = "translator.client-secret";
public static final String DEFAULT_ID = "dummy-id";
public static final String DEFAULT_SECRET = "dummy-secret";
+ private static final Logger LOG = LoggerFactory.getLogger(MicrosoftTranslator.class);
+ boolean available; // Flag for whether or not translation is available.
+ String clientId, clientSecret; // Keys used for the API calls.
/**
* Create a new MicrosoftTranslator with the client keys specified in
* resources/org/apache/tika/language/translate/translator.microsoft.properties. Silently becomes unavailable
* when client keys are unavailable. translator.microsoft.client-id and translator.client-secret must be set
* in translator.microsoft.properties for translation to work.
+ *
* @since Tika 1.6
*/
public MicrosoftTranslator() {
@@ -59,11 +59,11 @@ public class MicrosoftTranslator implements Translator {
InputStream stream;
stream = MicrosoftTranslator.class.getResourceAsStream(PROPERTIES_FILE);
try {
- if(stream != null) {
+ if (stream != null) {
props.load(stream);
clientId = props.getProperty(ID_PROPERTY);
clientSecret = props.getProperty(SECRET_PROPERTY);
- this.available = checkAvailable();
+ this.available = checkAvailable();
}
} catch (IOException e) {
LOG.warn("Error loading props file", e);
@@ -76,7 +76,7 @@ public class MicrosoftTranslator implements Translator {
* Use the Microsoft service to translate the given text from the given source language to the given target.
* You must set the client keys in translator.microsoft.properties.
*
- * @param text The text to translate.
+ * @param text The text to translate.
* @param sourceLanguage The input text language (for example, "en").
* @param targetLanguage The desired language to translate to (for example, "fr").
* @return The translated text. If translation is unavailable, returns the unchanged text.
@@ -84,8 +84,11 @@ public class MicrosoftTranslator implements Translator {
* @see org.apache.tika.language.translate.Translator
* @since Tika 1.6
*/
- public String translate(String text, String sourceLanguage, String targetLanguage) throws TikaException, IOException {
- if (!available) return text;
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ if (!available) {
+ return text;
+ }
Language source = Language.fromString(sourceLanguage);
Language target = Language.fromString(targetLanguage);
Translate.setClientId(clientId);
@@ -100,7 +103,8 @@ public class MicrosoftTranslator implements Translator {
/**
* Use the Microsoft service to translate the given text to the given target language. The source language
* is automatically detected by Microsoft. You must set the client keys in translator.microsoft.properties.
- * @param text The text to translate.
+ *
+ * @param text The text to translate.
* @param targetLanguage The desired language to translate to (for example, "hi").
* @return The translated text. If translation is unavailable, returns the unchanged text.
* @throws Exception
@@ -108,7 +112,9 @@ public class MicrosoftTranslator implements Translator {
* @since Tika 1.6
*/
public String translate(String text, String targetLanguage) throws TikaException, IOException {
- if (!available) return text;
+ if (!available) {
+ return text;
+ }
Language target = Language.fromString(targetLanguage);
Translate.setClientId(clientId);
Translate.setClientSecret(clientSecret);
@@ -122,34 +128,35 @@ public class MicrosoftTranslator implements Translator {
/**
* Check whether this instance has a working property file and its keys are not the defaults.
* This is not guaranteed to work, since keys may be incorrect or the webservice may be down.
+ *
* @return whether translation will probably work.
*/
- public boolean isAvailable(){
+ public boolean isAvailable() {
return available;
}
-
+
/**
* Sets the client Id for the translator API.
+ *
* @param id The ID to set.
*/
- public void setId(String id){
- this.clientId = id;
- this.available = checkAvailable();
+ public void setId(String id) {
+ this.clientId = id;
+ this.available = checkAvailable();
}
-
+
/**
* Sets the client secret for the translator API.
+ *
* @param secret The secret to set.
*/
- public void setSecret(String secret){
- this.clientSecret = secret;
- this.available = checkAvailable();
+ public void setSecret(String secret) {
+ this.clientSecret = secret;
+ this.available = checkAvailable();
}
-
- private boolean checkAvailable(){
- return clientId != null &&
- !clientId.equals(DEFAULT_ID) &&
- clientSecret != null &&
- !clientSecret.equals(DEFAULT_SECRET);
+
+ private boolean checkAvailable() {
+ return clientId != null && !clientId.equals(DEFAULT_ID) && clientSecret != null &&
+ !clientSecret.equals(DEFAULT_SECRET);
}
}
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MosesTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MosesTranslator.java
index cafd72589..4cc1aae6b 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MosesTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/MosesTranslator.java
@@ -50,10 +50,8 @@ public class MosesTranslator extends ExternalTranslator {
public MosesTranslator() {
Properties config = new Properties();
try {
- config.load(MosesTranslator.class
- .getResourceAsStream("translator.moses.properties"));
- new MosesTranslator(
- config.getProperty("translator.smt_path"),
+ config.load(MosesTranslator.class.getResourceAsStream("translator.moses.properties"));
+ new MosesTranslator(config.getProperty("translator.smt_path"),
config.getProperty("translator.script_path"));
} catch (IOException e) {
throw new AssertionError("Failed to read translator.moses.properties.");
@@ -63,7 +61,7 @@ public class MosesTranslator extends ExternalTranslator {
/**
* Create a Moses Translator with the specified smt jar and script paths.
*
- * @param smtPath Full path to the jar to run.
+ * @param smtPath Full path to the jar to run.
* @param scriptPath Full path to the script to pass to the smt jar.
*/
public MosesTranslator(String smtPath, String scriptPath) {
@@ -73,27 +71,31 @@ public class MosesTranslator extends ExternalTranslator {
}
@Override
- public String translate(String text, String sourceLanguage, String targetLanguage) throws TikaException, IOException {
- if (!isAvailable() || !checkCommand(buildCheckCommand(smtPath), 1)) return text;
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
+ if (!isAvailable() || !checkCommand(buildCheckCommand(smtPath), 1)) {
+ return text;
+ }
File tmpFile = new File(TMP_FILE_NAME);
- try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(tmpFile), Charset.defaultCharset())) {
+ try (OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(tmpFile),
+ Charset.defaultCharset())) {
out.append(text).append('\n').close();
}
- Runtime.getRuntime().exec(buildCommand(smtPath, scriptPath), new String[]{}, buildWorkingDirectory(scriptPath));
+ Runtime.getRuntime().exec(buildCommand(smtPath, scriptPath), new String[]{},
+ buildWorkingDirectory(scriptPath));
File tmpTranslatedFile = new File(TMP_FILE_NAME + ".translated");
StringBuilder stringBuilder = new StringBuilder();
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(
- new FileInputStream(tmpTranslatedFile),
- Charset.defaultCharset()
- ))) {
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(new FileInputStream(tmpTranslatedFile),
+ Charset.defaultCharset()))) {
String line;
while ((line = reader.readLine()) != null) stringBuilder.append(line);
}
- if (!tmpFile.delete() || !tmpTranslatedFile.delete()){
+ if (!tmpFile.delete() || !tmpTranslatedFile.delete()) {
throw new IOException("Failed to delete temporary files.");
}
return stringBuilder.toString();
@@ -106,19 +108,19 @@ public class MosesTranslator extends ExternalTranslator {
/**
* Build the command String to be executed.
- * @param smtPath Full path to the jar to run.
+ *
+ * @param smtPath Full path to the jar to run.
* @param scriptPath Full path to the script to pass to the smt jar.
* @return String to run on the command line.
*/
private String buildCommand(String smtPath, String scriptPath) {
- return "java -jar " + smtPath +
- " -c NONE " +
- scriptPath + " " +
+ return "java -jar " + smtPath + " -c NONE " + scriptPath + " " +
System.getProperty("user.dir") + "/" + TMP_FILE_NAME;
}
/**
* Build the command String to check if we can execute the smt jar.
+ *
* @param smtPath Full path to the jar to run.
* @return String to run on the command line.
*/
@@ -129,6 +131,7 @@ public class MosesTranslator extends ExternalTranslator {
/**
* Build the File that represents the desired working directory. In this case,
* the directory the script is in.
+ *
* @param scriptPath Full path to the script passed to the smt jar.
* @return File of the directory with the script in it.
*/
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/RTGTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/RTGTranslator.java
index 3ecf60908..2016a4062 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/RTGTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/RTGTranslator.java
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,27 +18,28 @@
package org.apache.tika.language.translate.impl;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.tika.exception.TikaException;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.charset.Charset;
import java.io.InputStreamReader;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.tika.exception.TikaException;
/**
@@ -82,8 +83,8 @@ public class RTGTranslator extends AbstractTranslator {
public RTGTranslator() {
String rtgBaseUrl = RTG_TRANSLATE_URL_BASE;
Properties config = new Properties();
- try (InputStream stream = getClass().getClassLoader().getResourceAsStream(RTG_PROPS)){
- if (stream != null){
+ try (InputStream stream = getClass().getClassLoader().getResourceAsStream(RTG_PROPS)) {
+ if (stream != null) {
config.load(stream);
}
rtgBaseUrl = config.getProperty("rtg.base.url", rtgBaseUrl);
@@ -96,12 +97,13 @@ public class RTGTranslator extends AbstractTranslator {
try {
this.client = WebClient.create(rtgBaseUrl, providers);
this.isAvailable = client.head().getStatus() == 200;
- } catch (Exception e){
+ } catch (Exception e) {
LOG.warn(e.getMessage(), e);
isAvailable = false;
}
}
+
@Override
public String translate(String text, String sourceLanguage, String targetLanguage)
throws TikaException, IOException {
@@ -109,8 +111,7 @@ public class RTGTranslator extends AbstractTranslator {
}
@Override
- public String translate(String text, String targetLanguage)
- throws TikaException, IOException {
+ public String translate(String text, String targetLanguage) throws TikaException, IOException {
return this.translate(text);
}
@@ -120,17 +121,15 @@ public class RTGTranslator extends AbstractTranslator {
}
Map<String, List<Object>> input = new HashMap<>();
input.put("source", Arrays.asList(text.split("(?<=(?<![A-Z])\\. )|\\n")));
- Response response = client.path("translate")
- .type(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON)
- .post(input);
- try (InputStreamReader reader = new InputStreamReader(
- (InputStream) response.getEntity(), Charset.defaultCharset())) {
+ Response response = client.path("translate").type(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON).post(input);
+ try (InputStreamReader reader = new InputStreamReader((InputStream) response.getEntity(),
+ Charset.defaultCharset())) {
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(reader);
List<String> sentences = (List<String>) obj.get("translation");
return String.join("\n", sentences);
- } catch (ParseException e){
+ } catch (ParseException e) {
throw new IOException(e.getMessage(), e);
}
}
diff --git a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/YandexTranslator.java b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/YandexTranslator.java
index 841d709c4..91687e0ea 100644
--- a/tika-translate/src/main/java/org/apache/tika/language/translate/impl/YandexTranslator.java
+++ b/tika-translate/src/main/java/org/apache/tika/language/translate/impl/YandexTranslator.java
@@ -17,25 +17,25 @@
package org.apache.tika.language.translate.impl;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.language.translate.Translator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static java.nio.charset.StandardCharsets.UTF_8;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.language.translate.Translator;
/**
* An implementation of a REST client for the YANDEX <a href="https://tech.yandex.com/translate/">Translate API</a>.
@@ -49,7 +49,8 @@ public class YandexTranslator implements Translator {
/**
* Yandex Translate API service end-point URL
*/
- private static final String YANDEX_TRANSLATE_URL_BASE = "https://translate.yandex.net/api/v1.5/tr.json/translate";
+ private static final String YANDEX_TRANSLATE_URL_BASE =
+ "https://translate.yandex.net/api/v1.5/tr.json/translate";
/**
* Default USer-Key, a real User-Key must be provided before the Lingo24 can successfully request translations
@@ -57,10 +58,10 @@ public class YandexTranslator implements Translator {
private static final String DEFAULT_KEY = "dummy-key";
/**
- * Identifies the client of the request, used for authentication
+ * Identifies the client of the request, used for authentication
*/
private String apiKey;
-
+
/**
* The Yandex Translate API can handle text in <b>plain</b> and/or <b>html</b> format, the default
* format is <b>plain</b>
@@ -70,9 +71,7 @@ public class YandexTranslator implements Translator {
public YandexTranslator() {
Properties config = new Properties();
try {
- config.load(YandexTranslator.class
- .getResourceAsStream(
- "translator.yandex.properties"));
+ config.load(YandexTranslator.class.getResourceAsStream("translator.yandex.properties"));
this.apiKey = config.getProperty("translator.api-key");
this.format = config.getProperty("translator.text.format");
} catch (Exception e) {
@@ -81,16 +80,16 @@ public class YandexTranslator implements Translator {
}
@Override
- public String translate(String text, String sourceLanguage,
- String targetLanguage) throws TikaException, IOException {
+ public String translate(String text, String sourceLanguage, String targetLanguage)
+ throws TikaException, IOException {
if (!this.isAvailable()) {
return text;
}
-
+
WebClient client = WebClient.create(YANDEX_TRANSLATE_URL_BASE);
-
+
String langCode;
-
+
if (sourceLanguage == null) {
//Translate Service will identify source language
langCode = targetLanguage;
@@ -100,14 +99,12 @@ public class YandexTranslator implements Translator {
}
//TODO Add support for text over 10k characters
- Response response = client.accept(MediaType.APPLICATION_JSON)
- .query("key", this.apiKey).query("lang", langCode)
- .query("text", text).get();
+ Response response = client.accept(MediaType.APPLICATION_JSON).query("key", this.apiKey)
+ .query("lang", langCode).query("text", text).get();
StringBuilder responseText = new StringBuilder();
try (InputStreamReader inputStreamReader = new InputStreamReader(
(InputStream) response.getEntity(), UTF_8);
- BufferedReader reader = new BufferedReader(inputStreamReader);
- ) {
+ BufferedReader reader = new BufferedReader(inputStreamReader)) {
String line;
while ((line = reader.readLine()) != null) {
responseText.append(line);
@@ -117,7 +114,7 @@ public class YandexTranslator implements Translator {
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonResp = mapper.readTree(responseText.toString());
-
+
if (!jsonResp.findValuesAsText("code").isEmpty()) {
String code = jsonResp.findValuesAsText("code").get(0);
if (code.equals("200")) {
@@ -126,16 +123,22 @@ public class YandexTranslator implements Translator {
throw new TikaException(jsonResp.findValue("message").get(0).asText());
}
} else {
- throw new TikaException("Return message not recognized: " + responseText.toString().substring(0, Math.min(responseText.length(), 100)));
+ throw new TikaException("Return message not recognized: " +
+ responseText.toString().substring(0, Math.min(responseText.length(), 100)));
}
} catch (JsonParseException e) {
- throw new TikaException("Error requesting translation from '" + sourceLanguage + "' to '" + targetLanguage + "', JSON response from Lingo24 is not well formatted: " + responseText.toString());
+ throw new TikaException(
+ "Error requesting translation from '" + sourceLanguage + "' to '" +
+ targetLanguage +
+ "', JSON response from Lingo24 is not well formatted: " +
+ responseText.toString());
}
}
/**
* Get the API Key in use for client authentication
+ *
* @return API Key
*/
public String getApiKey() {
@@ -144,6 +147,7 @@ public class YandexTranslator implements Translator {
/**
* Set the API Key for client authentication
+ *
* @param apiKey API Key
*/
public void setApiKey(String apiKey) {
@@ -154,6 +158,7 @@ public class YandexTranslator implements Translator {
* Retrieve the current text format setting.
* The Yandex Translate API can handle text in <b>plain</b> and/or <b>html</b> format, the default
* format is <b>plain</b>
+ *
* @return
*/
public String getFormat() {
@@ -162,6 +167,7 @@ public class YandexTranslator implements Translator {
/**
* Set the text format to use (plain/html)
+ *
* @param format Text format setting, either plain or html
*/
public void setFormat(String format) {
@@ -169,14 +175,13 @@ public class YandexTranslator implements Translator {
}
@Override
- public String translate(String text, String targetLanguage)
- throws TikaException, IOException {
+ public String translate(String text, String targetLanguage) throws TikaException, IOException {
return this.translate(text, null, targetLanguage);
}
@Override
public boolean isAvailable() {
- return this.apiKey!=null && !this.apiKey.equals(DEFAULT_KEY);
+ return this.apiKey != null && !this.apiKey.equals(DEFAULT_KEY);
}
}
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.google.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.google.properties
index 4e622ce9d..da0cf1638 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.google.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.google.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.joshua.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.joshua.properties
index 53bd773b2..fbb91b279 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.joshua.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.joshua.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
@@ -19,4 +20,4 @@
# if left as null, then translation will not occur and the source text
# will be returned.
# An example would be http://localhost:5000/joshua/translate/
-joshua.server.url=http://localhost:5000/joshua/translate/
\ No newline at end of file
+joshua.server.url=http://localhost:5000/joshua/translate/
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.lingo24.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.lingo24.properties
index 24756ac74..88759a842 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.lingo24.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.lingo24.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.marian.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.marian.properties
index 1399ceb78..bf4bf8232 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.marian.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.marian.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.microsoft.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.microsoft.properties
index 6656fd386..9acf06c7f 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.microsoft.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.microsoft.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.moses.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.moses.properties
index 55f917686..9ed3aebca 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.moses.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.moses.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
@@ -17,4 +18,4 @@
# script_path is the full path to the script to pass to the smt jar.
translator.smt_path=dummy-path
-translator.script_path=dummy-path
\ No newline at end of file
+translator.script_path=dummy-path
diff --git a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.yandex.properties b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.yandex.properties
index a3dcf8d96..c56a44038 100644
--- a/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.yandex.properties
+++ b/tika-translate/src/main/resources/org/apache/tika/language/translate/impl/translator.yandex.properties
@@ -1,3 +1,4 @@
+#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/CachedTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/CachedTranslatorTest.java
index 65dc44627..8bc6c4f20 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/CachedTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/CachedTranslatorTest.java
@@ -33,7 +33,7 @@ public class CachedTranslatorTest {
private CachedTranslator cachedTranslator;
@BeforeEach
- public void setUp(){
+ public void setUp() {
cachedTranslator = new CachedTranslator(new GoogleTranslator());
}
@@ -42,8 +42,10 @@ public class CachedTranslatorTest {
for (int i = 0; i < 20; i++) {
cachedTranslator.translate("This is a test string to translate!", "en", "sv");
}
- assertEquals(cachedTranslator.getNumTranslationPairs(), 1, "Cache doesn't have a single translation pair!");
- assertEquals(cachedTranslator.getNumTranslationsFor("en", "sv"), 1, "Cache has more than one element!");
+ assertEquals(cachedTranslator.getNumTranslationPairs(), 1,
+ "Cache doesn't have a single translation pair!");
+ assertEquals(cachedTranslator.getNumTranslationsFor("en", "sv"), 1,
+ "Cache has more than one element!");
}
@Test
@@ -52,9 +54,12 @@ public class CachedTranslatorTest {
cachedTranslator.translate("This is a test string to translate!", "en", "no");
cachedTranslator.translate("This is a different string...", "en", "fr");
}
- assertEquals(cachedTranslator.getNumTranslationPairs(), 2, "Cache doesn't have two translation pairs!");
- assertEquals(cachedTranslator.getNumTranslationsFor("en", "no"), 1, "Cache has more than en to no translation!");
- assertEquals(cachedTranslator.getNumTranslationsFor("en", "fr"), 1, "Cache has more than en to fr translation!");
+ assertEquals(cachedTranslator.getNumTranslationPairs(), 2,
+ "Cache doesn't have two translation pairs!");
+ assertEquals(cachedTranslator.getNumTranslationsFor("en", "no"), 1,
+ "Cache has more than en to no translation!");
+ assertEquals(cachedTranslator.getNumTranslationsFor("en", "fr"), 1,
+ "Cache has more than en to fr translation!");
}
@Test
@@ -65,8 +70,7 @@ public class CachedTranslatorTest {
if (cachedTranslator.isAvailable()) {
String result = cachedTranslator.translate(source, "es", "en");
assertNotNull(result);
- assertEquals("Result: [" + result
- + "]: not equal to expected: [" + expected + "]",
+ assertEquals("Result: [" + result + "]: not equal to expected: [" + expected + "]",
expected, result);
}
}
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/GoogleTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/GoogleTranslatorTest.java
index dcb6a9b8a..dae288ef7 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/GoogleTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/GoogleTranslatorTest.java
@@ -25,63 +25,60 @@ import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.apache.tika.language.translate.impl.GoogleTranslator;
-
/**
* Test harness for the {@link GoogleTranslator}.
- *
*/
-public class GoogleTranslatorTest {
-
- private GoogleTranslator translator;
-
- public GoogleTranslatorTest() {
-
- }
-
- @BeforeEach
- public void setUp() {
- translator = new GoogleTranslator();
- }
-
- @Test
- public void testSimpleTranslate() {
- String source = "hola senor";
- String expected = "hello sir";
-
- String result = null;
- if (translator.isAvailable()) {
- try {
- result = translator.translate(source, "es", "en");
- assertNotNull(result);
- assertEquals(expected, result, "Result: [" + result
- + "]: not equal to expected: [" + expected + "]");
- } catch (Exception e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- @Test
- public void testTranslateGuessLanguage() {
- String source = "bonjour comment vas-tu";
- String expected = "hello how are you";
-
- String result = null;
- if (translator.isAvailable()) {
- try {
- result = translator.translate(source, "en");
- assertNotNull(result);
- assertEquals(expected, result, "Result: [" + result
- + "]: not equal to expected: [" + expected + "]");
- } catch (Exception e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- }
+public class GoogleTranslatorTest {
+
+ private GoogleTranslator translator;
+
+ public GoogleTranslatorTest() {
+
+ }
+
+ @BeforeEach
+ public void setUp() {
+ translator = new GoogleTranslator();
+ }
+
+ @Test
+ public void testSimpleTranslate() {
+ String source = "hola senor";
+ String expected = "hello sir";
+
+ String result = null;
+ if (translator.isAvailable()) {
+ try {
+ result = translator.translate(source, "es", "en");
+ assertNotNull(result);
+ assertEquals(expected, result,
+ "Result: [" + result + "]: not equal to expected: [" + expected + "]");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ }
+
+ @Test
+ public void testTranslateGuessLanguage() {
+ String source = "bonjour comment vas-tu";
+ String expected = "hello how are you";
+
+ String result = null;
+ if (translator.isAvailable()) {
+ try {
+ result = translator.translate(source, "en");
+ assertNotNull(result);
+ assertEquals(expected, result,
+ "Result: [" + result + "]: not equal to expected: [" + expected + "]");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ }
}
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/Lingo24TranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/Lingo24TranslatorTest.java
index 08114b69b..a94b6ea66 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/Lingo24TranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/Lingo24TranslatorTest.java
@@ -25,7 +25,6 @@ import org.junit.jupiter.api.Test;
/**
* Test harness for the {@link Lingo24Translator}.
- *
*/
public class Lingo24TranslatorTest {
@@ -46,9 +45,8 @@ public class Lingo24TranslatorTest {
try {
result = translator.translate(source, "es", "en");
assertNotNull(result);
- assertEquals(
- expected, result, "Result: [" + result
- + "]: not equal to expected: [" + expected + "]");
+ assertEquals(expected, result,
+ "Result: [" + result + "]: not equal to expected: [" + expected + "]");
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
@@ -67,8 +65,7 @@ public class Lingo24TranslatorTest {
result = translator.translate(source, "en");
assertNotNull(result);
assertEquals(expected, result,
- "Result: [" + result
- + "]: not equal to expected: [" + expected + "]");
+ "Result: [" + result + "]: not equal to expected: [" + expected + "]");
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MarianTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MarianTranslatorTest.java
index 42bbf68fb..16aacc4fe 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MarianTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MarianTranslatorTest.java
@@ -38,8 +38,8 @@ public class MarianTranslatorTest {
String source = "Apache Tika is a wonderful tool";
String expected = "Apache Tika este un instrument minunat";
String translated = translator.translate(source, "en", "ro");
- assertTrue(expected.equalsIgnoreCase(translated),
- "Translate " + source + " to " + expected + " (was " + translated + ")");
+ assertTrue(expected.equalsIgnoreCase(translated),
+ "Translate " + source + " to " + expected + " (was " + translated + ")");
}
@Test
@@ -55,7 +55,8 @@ public class MarianTranslatorTest {
@Test
public void testNoConfig() throws Exception {
String source = "Apache Tika is a wonderful tool";
- String expected = "Apache Tika is a wonderful tool"; // Pattern from other Translators is to return source
+ String expected =
+ "Apache Tika is a wonderful tool"; // Pattern from other Translators is to return source
String translated = translator.translate(source, "en", "zz");
assertTrue(expected.equalsIgnoreCase(translated),
"Translate " + source + " to " + expected + " (was " + translated + ")");
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MicrosoftTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MicrosoftTranslatorTest.java
index 5231ee158..fb8036cd6 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MicrosoftTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MicrosoftTranslatorTest.java
@@ -28,6 +28,7 @@ import org.junit.jupiter.api.Test;
*/
public class MicrosoftTranslatorTest {
MicrosoftTranslator translator;
+
@BeforeEach
public void setUp() {
translator = new MicrosoftTranslator();
@@ -52,27 +53,25 @@ public class MicrosoftTranslatorTest {
assertTrue(expected.equalsIgnoreCase(translated),
"Translate " + source + " to " + expected + " (was " + translated + ")");
}
-
+
@Test
- public void testSettersAndIsAvailable(){
- try{
- translator.setId("foo");
- translator.setSecret("bar");
- }
- catch(Exception e){
- e.printStackTrace();
- fail(e.getMessage());
- }
- //reset
- translator = new MicrosoftTranslator();
- try{
- translator.setSecret("bar");
- translator.setId("foo");
- }
- catch(Exception e){
- e.printStackTrace();
- fail(e.getMessage());
- }
+ public void testSettersAndIsAvailable() {
+ try {
+ translator.setId("foo");
+ translator.setSecret("bar");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ //reset
+ translator = new MicrosoftTranslator();
+ try {
+ translator.setSecret("bar");
+ translator.setId("foo");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
}
}
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MosesTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MosesTranslatorTest.java
index 40aca5a84..6ad95f18f 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MosesTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/MosesTranslatorTest.java
@@ -16,14 +16,15 @@
*/
package org.apache.tika.language.translate.impl;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
public class MosesTranslatorTest {
MosesTranslator translator;
+
@BeforeEach
public void setUp() {
translator = new MosesTranslator();
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/RTGTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/RTGTranslatorTest.java
index 8d5f458e7..ac1067bad 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/RTGTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/RTGTranslatorTest.java
@@ -17,22 +17,19 @@
package org.apache.tika.language.translate.impl;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.Locale;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
-import org.apache.tika.language.translate.impl.RTGTranslator;
+import java.util.Locale;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
/**
* Test harness for the {@link RTGTranslator}.
- *
*/
public class RTGTranslatorTest {
diff --git a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/YandexTranslatorTest.java b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/YandexTranslatorTest.java
index b8802d961..9d8171350 100644
--- a/tika-translate/src/test/java/org/apache/tika/language/translate/impl/YandexTranslatorTest.java
+++ b/tika-translate/src/test/java/org/apache/tika/language/translate/impl/YandexTranslatorTest.java
@@ -21,13 +21,12 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.language.translate.impl.YandexTranslator;
+import java.io.IOException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import java.io.IOException;
+import org.apache.tika.exception.TikaException;
/**
* Generic Tests to ensure that the RSS library behaves as expected
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/XMPMetadata.java b/tika-xmp/src/main/java/org/apache/tika/xmp/XMPMetadata.java
index 124a4b0b0..cd12cc117 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/XMPMetadata.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/XMPMetadata.java
@@ -24,16 +24,9 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;
+import java.util.Objects;
import java.util.Properties;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Property;
-import org.apache.tika.metadata.Property.PropertyType;
-import org.apache.tika.metadata.PropertyTypeException;
-import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.xmp.convert.TikaToXMP;
-
import com.adobe.internal.xmp.XMPDateTime;
import com.adobe.internal.xmp.XMPException;
import com.adobe.internal.xmp.XMPIterator;
@@ -46,21 +39,33 @@ import com.adobe.internal.xmp.options.PropertyOptions;
import com.adobe.internal.xmp.options.SerializeOptions;
import com.adobe.internal.xmp.properties.XMPProperty;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Property;
+import org.apache.tika.metadata.Property.PropertyType;
+import org.apache.tika.metadata.PropertyTypeException;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.xmp.convert.TikaToXMP;
+
/**
* Provides a conversion of the Metadata map from Tika to the XMP data model by also providing the
* Metadata API for clients to ease transition. But clients can also work directly on the XMP data
* model, by getting the XMPMeta reference from this class. Usually the instance would be
* initialized by providing the Metadata object that had been returned from Tika-core which
* populates the XMP data model with all properties that can be converted.
- *
+ * <p>
* This class is not serializable!
*/
@SuppressWarnings("serial")
public class XMPMetadata extends Metadata {
- /** The XMP data */
- private XMPMeta xmpData;
- /** Use the XMP namespace registry implementation */
+ /**
+ * Use the XMP namespace registry implementation
+ */
private static final XMPSchemaRegistry registry = XMPMetaFactory.getSchemaRegistry();
+ /**
+ * The XMP data
+ */
+ private XMPMeta xmpData;
/**
* Initializes with an empty XMP packet
@@ -74,7 +79,7 @@ public class XMPMetadata extends Metadata {
* But the mimetype is retrieved from the metadata map.
*/
public XMPMetadata(Metadata meta) throws TikaException {
- this.xmpData = TikaToXMP.convert( meta );
+ this.xmpData = TikaToXMP.convert(meta);
}
/**
@@ -84,104 +89,61 @@ public class XMPMetadata extends Metadata {
* will convert only those properties that are in known namespaces and are using the correct
* prefixes
*
- * @param meta
- * the Metadata information from Tika-core
- * @param mimetype
- * mimetype information
- * @throws TikaException
- * case an error occured during conversion
+ * @param meta the Metadata information from Tika-core
+ * @param mimetype mimetype information
+ * @throws TikaException case an error occurred during conversion
*/
public XMPMetadata(Metadata meta, String mimetype) throws TikaException {
- this.xmpData = TikaToXMP.convert( meta, mimetype );
- }
-
- /**
- * @see org.apache.tika.xmp.XMPMetadata#process(org.apache.tika.metadata.Metadata,
- * java.lang.String)
- * But the mimetype is retrieved from the metadata map.
- */
- public void process(Metadata meta) throws TikaException {
- this.xmpData = TikaToXMP.convert( meta );
- }
-
- /**
- * Converts the Metadata information to XMP. If a mimetype is provided, a specific converter can
- * be used, that converts all available metadata. If there is no mimetype provided or no
- * specific converter available a generic conversion is done which will convert only those
- * properties that are in known namespaces and are using the correct prefixes
- *
- * @param meta
- * the Metadata information from Tika-core
- * @param mimetype
- * mimetype information
- * @throws TikaException
- * case an error occured during conversion
- */
- public void process(Metadata meta, String mimetype) throws TikaException {
- this.xmpData = TikaToXMP.convert( meta, mimetype );
- }
-
- /**
- * Provides direct access to the XMP data model, in case a client prefers to work directly on it
- * instead of using the Metadata API
- *
- * @return the "internal" XMP data object
- */
- public XMPMeta getXMPData() {
- return xmpData;
+ this.xmpData = TikaToXMP.convert(meta, mimetype);
}
- // === Namespace Registry API === //
/**
* Register a namespace URI with a suggested prefix. It is not an error if the URI is already
* registered, no matter what the prefix is. If the URI is not registered but the suggested
- * prefix is in use, a unique prefix is created from the suggested one. The actual registeed
+ * prefix is in use, a unique prefix is created from the suggested one. The actual registered
* prefix is always returned. The function result tells if the registered prefix is the
* suggested one.
* Note: No checking is presently done on either the URI or the prefix.
*
- * @param namespaceURI
- * The URI for the namespace. Must be a valid XML URI.
- * @param suggestedPrefix
- * The suggested prefix to be used if the URI is not yet registered. Must be a valid
- * XML name.
+ * @param namespaceURI The URI for the namespace. Must be a valid XML URI.
+ * @param suggestedPrefix The suggested prefix to be used if the URI is not yet registered. Must be a valid
+ * XML name.
* @return Returns the registered prefix for this URI, is equal to the suggestedPrefix if the
- * namespace hasn't been registered before, otherwise the existing prefix.
- * @throws XMPException
- * If the parameters are not accordingly set
+ * namespace hasn't been registered before, otherwise the existing prefix.
+ * @throws XMPException If the parameters are not accordingly set
*/
public static String registerNamespace(String namespaceURI, String suggestedPrefix)
throws XMPException {
- return registry.registerNamespace( namespaceURI, suggestedPrefix );
+ return registry.registerNamespace(namespaceURI, suggestedPrefix);
}
/**
* Obtain the prefix for a registered namespace URI.
* It is not an error if the namespace URI is not registered.
*
- * @param namespaceURI
- * The URI for the namespace. Must not be null or the empty string.
+ * @param namespaceURI The URI for the namespace. Must not be null or the empty string.
* @return Returns the prefix registered for this namespace URI or null.
*/
public static String getNamespacePrefix(String namespaceURI) {
- return registry.getNamespacePrefix( namespaceURI );
+ return registry.getNamespacePrefix(namespaceURI);
}
/**
* Obtain the URI for a registered namespace prefix.
* It is not an error if the namespace prefix is not registered.
*
- * @param namespacePrefix
- * The prefix for the namespace. Must not be null or the empty string.
+ * @param namespacePrefix The prefix for the namespace. Must not be null or the empty string.
* @return Returns the URI registered for this prefix or null.
*/
public static String getNamespaceURI(String namespacePrefix) {
- return registry.getNamespaceURI( namespacePrefix );
+ return registry.getNamespaceURI(namespacePrefix);
}
+ // === Namespace Registry API === //
+
/**
* @return Returns the registered prefix/namespace-pairs as map, where the keys are the
- * namespaces and the values are the prefixes.
+ * namespaces and the values are the prefixes.
*/
@SuppressWarnings("unchecked")
public static Map<String, String> getNamespaces() {
@@ -190,7 +152,7 @@ public class XMPMetadata extends Metadata {
/**
* @return Returns the registered namespace/prefix-pairs as map, where the keys are the prefixes
- * and the values are the namespaces.
+ * and the values are the namespaces.
*/
@SuppressWarnings("unchecked")
public static Map<String, String> getPrefixes() {
@@ -205,20 +167,53 @@ public class XMPMetadata extends Metadata {
* <p>
* Note: Not yet implemented.
*
- * @param namespaceURI
- * The URI for the namespace.
+ * @param namespaceURI The URI for the namespace.
*/
public static void deleteNamespace(String namespaceURI) {
- registry.deleteNamespace( namespaceURI );
+ registry.deleteNamespace(namespaceURI);
+ }
+
+ /**
+ * @see org.apache.tika.xmp.XMPMetadata#process(org.apache.tika.metadata.Metadata,
+ * java.lang.String)
+ * But the mimetype is retrieved from the metadata map.
+ */
+ public void process(Metadata meta) throws TikaException {
+ this.xmpData = TikaToXMP.convert(meta);
+ }
+
+ /**
+ * Converts the Metadata information to XMP. If a mimetype is provided, a specific converter can
+ * be used, that converts all available metadata. If there is no mimetype provided or no
+ * specific converter available a generic conversion is done which will convert only those
+ * properties that are in known namespaces and are using the correct prefixes
+ *
+ * @param meta the Metadata information from Tika-core
+ * @param mimetype mimetype information
+ * @throws TikaException case an error occurred during conversion
+ */
+ public void process(Metadata meta, String mimetype) throws TikaException {
+ this.xmpData = TikaToXMP.convert(meta, mimetype);
+ }
+
+ /**
+ * Provides direct access to the XMP data model, in case a client prefers to work directly on it
+ * instead of using the Metadata API
+ *
+ * @return the "internal" XMP data object
+ */
+ public XMPMeta getXMPData() {
+ return xmpData;
}
// === Metadata API === //
+
/**
* @see org.apache.tika.xmp.XMPMetadata#isMultiValued(java.lang.String)
*/
@Override
public boolean isMultiValued(Property property) {
- return this.isMultiValued( property.getName() );
+ return this.isMultiValued(property.getName());
}
/**
@@ -228,18 +223,17 @@ public class XMPMetadata extends Metadata {
*/
@Override
public boolean isMultiValued(String name) {
- checkKey( name );
+ checkKey(name);
- String[] keyParts = splitKey( name );
+ String[] keyParts = splitKey(name);
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
try {
- XMPProperty prop = xmpData.getProperty( ns, keyParts[1] );
+ XMPProperty prop = xmpData.getProperty(ns, keyParts[1]);
return prop.getOptions().isArray();
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
}
@@ -252,7 +246,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public String[] names() {
- throw new UnsupportedOperationException( "Not implemented" );
+ throw new UnsupportedOperationException("Not implemented");
}
/**
@@ -263,26 +257,24 @@ public class XMPMetadata extends Metadata {
*/
@Override
public String get(String name) {
- checkKey( name );
+ checkKey(name);
String value = null;
- String[] keyParts = splitKey( name );
+ String[] keyParts = splitKey(name);
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
try {
- XMPProperty prop = xmpData.getProperty( ns, keyParts[1] );
+ XMPProperty prop = xmpData.getProperty(ns, keyParts[1]);
if (prop != null && prop.getOptions().isSimple()) {
value = prop.getValue();
- }
- else if (prop != null && prop.getOptions().isArray()) {
- prop = xmpData.getArrayItem( ns, keyParts[1], 1 );
+ } else if (prop != null && prop.getOptions().isArray()) {
+ prop = xmpData.getArrayItem(ns, keyParts[1], 1);
value = prop.getValue();
}
// in all other cases, null is returned
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
}
@@ -295,7 +287,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public String get(Property property) {
- return this.get( property.getName() );
+ return this.get(property.getName());
}
/**
@@ -307,8 +299,7 @@ public class XMPMetadata extends Metadata {
try {
result = XMPUtils.convertToInteger(this.get(property.getName()));
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
@@ -323,15 +314,14 @@ public class XMPMetadata extends Metadata {
Date result = null;
try {
- XMPDateTime xmpDate = XMPUtils.convertToDate( this.get( property.getName() ) );
+ XMPDateTime xmpDate = XMPUtils.convertToDate(this.get(property.getName()));
if (xmpDate != null) {
Calendar cal = xmpDate.getCalendar();
// TODO Timezone is currently lost
// need another solution that preserves the timezone
result = cal.getTime();
}
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
@@ -343,7 +333,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public String[] getValues(Property property) {
- return this.getValues( property.getName() );
+ return this.getValues(property.getName());
}
/**
@@ -354,31 +344,29 @@ public class XMPMetadata extends Metadata {
*/
@Override
public String[] getValues(String name) {
- checkKey( name );
+ checkKey(name);
String[] value = null;
- String[] keyParts = splitKey( name );
+ String[] keyParts = splitKey(name);
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
try {
- XMPProperty prop = xmpData.getProperty( ns, keyParts[1] );
+ XMPProperty prop = xmpData.getProperty(ns, keyParts[1]);
if (prop != null && prop.getOptions().isSimple()) {
value = new String[1];
value[0] = prop.getValue();
- }
- else if (prop != null && prop.getOptions().isArray()) {
- int size = xmpData.countArrayItems( ns, keyParts[1] );
+ } else if (prop != null && prop.getOptions().isArray()) {
+ int size = xmpData.countArrayItems(ns, keyParts[1]);
value = new String[size];
boolean onlySimpleChildren = true;
for (int i = 0; i < size && onlySimpleChildren; i++) {
- prop = xmpData.getArrayItem( ns, keyParts[1], i + 1 );
+ prop = xmpData.getArrayItem(ns, keyParts[1], i + 1);
if (prop.getOptions().isSimple()) {
value[i] = prop.getValue();
- }
- else {
+ } else {
onlySimpleChildren = false;
}
}
@@ -388,8 +376,7 @@ public class XMPMetadata extends Metadata {
}
}
// in all other cases, null is returned
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
}
@@ -405,7 +392,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void add(String name, String value) {
- set( name, value );
+ set(name, value);
}
/**
@@ -416,16 +403,15 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void set(String name, String value) {
- checkKey( name );
+ checkKey(name);
- String[] keyParts = splitKey( name );
+ String[] keyParts = splitKey(name);
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
try {
- xmpData.setProperty( ns, keyParts[1], value );
- }
- catch (XMPException e) {
+ xmpData.setProperty(ns, keyParts[1], value);
+ } catch (XMPException e) {
// Ignore
}
}
@@ -436,7 +422,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void set(Property property, String value) {
- this.set( property.getName(), value );
+ this.set(property.getName(), value);
}
/**
@@ -446,7 +432,7 @@ public class XMPMetadata extends Metadata {
public void set(Property property, int value) {
// Can reuse the checks from the base class implementation which will call
// the set(String, String) method in the end
- super.set( property, value );
+ super.set(property, value);
}
/**
@@ -454,7 +440,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void set(Property property, double value) {
- super.set( property, value );
+ super.set(property, value);
}
/**
@@ -462,7 +448,7 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void set(Property property, Date date) {
- super.set( property, date );
+ super.set(property, date);
}
/**
@@ -470,29 +456,28 @@ public class XMPMetadata extends Metadata {
* properties that use a registered prefix are stored in the XMP.
*
* @see org.apache.tika.metadata.Metadata#set(org.apache.tika.metadata.Property,
- * java.lang.String[])
+ * java.lang.String[])
*/
@Override
public void set(Property property, String[] values) {
- checkKey( property.getName() );
+ checkKey(property.getName());
if (!property.isMultiValuePermitted()) {
- throw new PropertyTypeException( "Property is not of an array type" );
+ throw new PropertyTypeException("Property is not of an array type");
}
- String[] keyParts = splitKey( property.getName() );
+ String[] keyParts = splitKey(property.getName());
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
try {
- int arrayType = tikaToXMPArrayType( property.getPrimaryProperty().getPropertyType() );
- xmpData.setProperty( ns, keyParts[1], null, new PropertyOptions( arrayType ) );
+ int arrayType = tikaToXMPArrayType(property.getPrimaryProperty().getPropertyType());
+ xmpData.setProperty(ns, keyParts[1], null, new PropertyOptions(arrayType));
for (String value : values) {
- xmpData.appendArrayItem( ns, keyParts[1], value );
+ xmpData.appendArrayItem(ns, keyParts[1], value);
}
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// Ignore
}
}
@@ -505,23 +490,22 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void setAll(Properties properties) {
- @SuppressWarnings("unchecked")
- Enumeration<String> names = (Enumeration<String>) properties.propertyNames();
+ @SuppressWarnings("unchecked") Enumeration<String> names =
+ (Enumeration<String>) properties.propertyNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
- Property property = Property.get( name );
+ Property property = Property.get(name);
if (property == null) {
- throw new PropertyTypeException( "Unknown property: " + name );
+ throw new PropertyTypeException("Unknown property: " + name);
}
- String value = properties.getProperty( name );
+ String value = properties.getProperty(name);
if (property.isMultiValuePermitted()) {
- this.set( property, new String[] { value } );
- }
- else {
- this.set( property, value );
+ this.set(property, new String[]{value});
+ } else {
+ this.set(property, value);
}
}
}
@@ -530,7 +514,7 @@ public class XMPMetadata extends Metadata {
* @see org.apache.tika.xmp.XMPMetadata#remove(java.lang.String)
*/
public void remove(Property property) {
- this.remove( property.getName() );
+ this.remove(property.getName());
}
/**
@@ -541,13 +525,13 @@ public class XMPMetadata extends Metadata {
*/
@Override
public void remove(String name) {
- checkKey( name );
+ checkKey(name);
- String[] keyParts = splitKey( name );
+ String[] keyParts = splitKey(name);
- String ns = registry.getNamespaceURI( keyParts[0] );
+ String ns = registry.getNamespaceURI(keyParts[0]);
if (ns != null) {
- xmpData.deleteProperty( ns, keyParts[1] );
+ xmpData.deleteProperty(ns, keyParts[1]);
}
}
@@ -560,15 +544,14 @@ public class XMPMetadata extends Metadata {
try {
// Get an iterator for the XMP packet, starting at the top level schema nodes
- XMPIterator nsIter = xmpData.iterator( new IteratorOptions().setJustChildren( true )
- .setOmitQualifiers( true ) );
+ XMPIterator nsIter = xmpData.iterator(
+ new IteratorOptions().setJustChildren(true).setOmitQualifiers(true));
// iterate all top level namespaces
while (nsIter.hasNext()) {
nsIter.next();
size++;
}
- }
- catch (XMPException e) {
+ } catch (XMPException e) {
// ignore
}
@@ -581,7 +564,12 @@ public class XMPMetadata extends Metadata {
*/
@Override
public boolean equals(Object o) {
- throw new UnsupportedOperationException( "Not implemented" );
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), xmpData);
}
/**
@@ -593,10 +581,9 @@ public class XMPMetadata extends Metadata {
public String toString() {
String result = null;
try {
- result = XMPMetaFactory.serializeToString( xmpData, new SerializeOptions()
- .setOmitPacketWrapper( true ).setUseCompactFormat( true ) );
- }
- catch (XMPException e) {
+ result = XMPMetaFactory.serializeToString(xmpData,
+ new SerializeOptions().setOmitPacketWrapper(true).setUseCompactFormat(true));
+ } catch (XMPException e) {
// ignore
}
return result;
@@ -615,41 +602,39 @@ public class XMPMetadata extends Metadata {
/**
* Checks if the given key is a valid QName with a known standard namespace prefix
*
- * @param key
- * the key to check
+ * @param key the key to check
* @return true if the key is valid otherwise false
*/
private void checkKey(String key) throws PropertyTypeException {
if (key == null || key.length() == 0) {
- throw new PropertyTypeException( "Key must not be null" );
+ throw new PropertyTypeException("Key must not be null");
}
- String[] keyParts = splitKey( key );
+ String[] keyParts = splitKey(key);
if (keyParts == null) {
- throw new PropertyTypeException( "Key must be a QName in the form prefix:localName" );
+ throw new PropertyTypeException("Key must be a QName in the form prefix:localName");
}
- if (registry.getNamespaceURI( keyParts[0] ) == null) {
- throw new PropertyTypeException( "Key does not use a registered Namespace prefix" );
+ if (registry.getNamespaceURI(keyParts[0]) == null) {
+ throw new PropertyTypeException("Key does not use a registered Namespace prefix");
}
}
/**
* Split the given key at the namespace prefix delimiter
*
- * @param key
- * the key to split
+ * @param key the key to split
* @return prefix and local name of the property or null if the key did not contain a delimiter
- * or too much of them
+ * or too much of them
*/
private String[] splitKey(String key) {
- String[] keyParts = key.split( TikaCoreProperties.NAMESPACE_PREFIX_DELIMITER );
+ String[] keyParts = key.split(TikaCoreProperties.NAMESPACE_PREFIX_DELIMITER);
if (keyParts.length > 0 && keyParts.length <= 2) {
return keyParts;
}
return null;
- }// checkKeyPrefix
+ } // checkKeyPrefix
/**
* Convert Tika array types to XMP array types
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/AbstractConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/AbstractConverter.java
index bd1ffa9a1..ed03e2a0e 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/AbstractConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/AbstractConverter.java
@@ -18,10 +18,6 @@ package org.apache.tika.xmp.convert;
import java.util.Set;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Property;
-
import com.adobe.internal.xmp.XMPConst;
import com.adobe.internal.xmp.XMPException;
import com.adobe.internal.xmp.XMPMeta;
@@ -30,12 +26,22 @@ import com.adobe.internal.xmp.XMPSchemaRegistry;
import com.adobe.internal.xmp.XMPUtils;
import com.adobe.internal.xmp.options.PropertyOptions;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Property;
+
/**
* Base class for Tika Metadata to XMP converter which provides some needed common functionality.
*/
public abstract class AbstractConverter implements ITikaToXMPConverter {
- private Metadata metadata;
protected XMPMeta meta;
+ private Metadata metadata;
+
+ public AbstractConverter() throws TikaException {
+ meta = XMPMetaFactory.create();
+ metadata = new Metadata();
+ registerNamespaces(getAdditionalNamespaces());
+ }
abstract public XMPMeta process(Metadata metadata) throws XMPException;
@@ -47,12 +53,6 @@ public abstract class AbstractConverter implements ITikaToXMPConverter {
*/
abstract protected Set<Namespace> getAdditionalNamespaces();
- public AbstractConverter() throws TikaException {
- meta = XMPMetaFactory.create();
- metadata = new Metadata();
- registerNamespaces( getAdditionalNamespaces() );
- }
-
public void setMetadata(Metadata metadata) {
this.metadata = metadata;
}
@@ -67,10 +67,8 @@ public abstract class AbstractConverter implements ITikaToXMPConverter {
* Registers a number <code>Namespace</code> information with XMPCore. Any already registered
* namespace is not registered again.
*
- * @param namespaces
- * the list of namespaces to be registered
- * @throws TikaException
- * in case a namespace oculd not be registered
+ * @param namespaces the list of namespaces to be registered
+ * @throws TikaException in case a namespace oculd not be registered
*/
protected void registerNamespaces(Set<Namespace> namespaces) throws TikaException {
XMPSchemaRegistry registry = XMPMetaFactory.getSchemaRegistry();
@@ -78,11 +76,10 @@ public abstract class AbstractConverter implements ITikaToXMPConverter {
for (Namespace namespace : namespaces) {
// Any already registered namespace is not registered again
try {
- registry.registerNamespace( namespace.uri, namespace.prefix );
- }
- catch (XMPException e) {
+ registry.registerNamespace(namespace.uri, namespace.prefix);
+ } catch (XMPException e) {
throw new TikaException(
- "Namespace needed by converter could not be registiered with XMPCore", e );
+ "Namespace needed by converter could not be registiered with XMPCore", e);
}
}
}
@@ -92,26 +89,22 @@ public abstract class AbstractConverter implements ITikaToXMPConverter {
*/
protected void createProperty(Property metadataProperty, String ns, String propertyName)
throws XMPException {
- createProperty( metadataProperty.getName(), ns, propertyName );
+ createProperty(metadataProperty.getName(), ns, propertyName);
}
/**
* Creates a simple property.
*
- * @param tikaKey
- * Key in the Tika metadata map
- * @param ns
- * namespace the property should be created in
- * @param propertyName
- * name of the property
- * @throws XMPException
- * if the property could not be created
+ * @param tikaKey Key in the Tika metadata map
+ * @param ns namespace the property should be created in
+ * @param propertyName name of the property
+ * @throws XMPException if the property could not be created
*/
protected void createProperty(String tikaKey, String ns, String propertyName)
throws XMPException {
- String value = metadata.get( tikaKey );
+ String value = metadata.get(tikaKey);
if (value != null && value.length() > 0) {
- meta.setProperty( ns, propertyName, value );
+ meta.setProperty(ns, propertyName, value);
}
}
@@ -120,84 +113,71 @@ public abstract class AbstractConverter implements ITikaToXMPConverter {
*/
protected void createLangAltProperty(Property metadataProperty, String ns, String propertyName)
throws XMPException {
- createLangAltProperty( metadataProperty.getName(), ns, propertyName );
+ createLangAltProperty(metadataProperty.getName(), ns, propertyName);
}
/**
* Creates a language alternative property in the x-default language
*
- * @param tikaKey
- * Key in the Tika metadata map
- * @param ns
- * namespace the property should be created in
- * @param propertyName
- * name of the property
- * @throws XMPException
- * if the property could not be created
+ * @param tikaKey Key in the Tika metadata map
+ * @param ns namespace the property should be created in
+ * @param propertyName name of the property
+ * @throws XMPException if the property could not be created
*/
protected void createLangAltProperty(String tikaKey, String ns, String propertyName)
throws XMPException {
- String value = metadata.get( tikaKey );
+ String value = metadata.get(tikaKey);
if (value != null && value.length() > 0) {
- meta.setLocalizedText( ns, propertyName, null, XMPConst.X_DEFAULT, value );
+ meta.setLocalizedText(ns, propertyName, null, XMPConst.X_DEFAULT, value);
}
}
- protected void createArrayProperty(Property metadataProperty, String nsDc,
- String arrayProperty, int arrayType) throws XMPException {
- createArrayProperty( metadataProperty.getName(), nsDc, arrayProperty, arrayType );
+ protected void createArrayProperty(Property metadataProperty, String nsDc, String arrayProperty,
+ int arrayType) throws XMPException {
+ createArrayProperty(metadataProperty.getName(), nsDc, arrayProperty, arrayType);
}
/**
* Creates an array property from a list of values.
*
- * @param tikaKey
- * Key in the Tika metadata map
- * @param ns
- * namespace the property should be created in
- * @param propertyName
- * name of the property
- * @param arrayType
- * depicts which kind of array shall be created
- * @throws XMPException
- * if the property could not be created
+ * @param tikaKey Key in the Tika metadata map
+ * @param ns namespace the property should be created in
+ * @param propertyName name of the property
+ * @param arrayType depicts which kind of array shall be created
+ * @throws XMPException if the property could not be created
*/
- protected void createArrayProperty(String tikaKey, String ns, String propertyName, int arrayType)
- throws XMPException {
- String[] values = metadata.getValues( tikaKey );
+ protected void createArrayProperty(String tikaKey, String ns, String propertyName,
+ int arrayType) throws XMPException {
+ String[] values = metadata.getValues(tikaKey);
if (values != null) {
- meta.setProperty( ns, propertyName, null, new PropertyOptions( arrayType ) );
+ meta.setProperty(ns, propertyName, null, new PropertyOptions(arrayType));
for (String value : values) {
- meta.appendArrayItem( ns, propertyName, value );
+ meta.appendArrayItem(ns, propertyName, value);
}
}
}
protected void createCommaSeparatedArray(Property metadataProperty, String nsDc,
- String arrayProperty, int arrayType) throws XMPException {
- createCommaSeparatedArray( metadataProperty.getName(), nsDc, arrayProperty, arrayType );
+ String arrayProperty, int arrayType)
+ throws XMPException {
+ createCommaSeparatedArray(metadataProperty.getName(), nsDc, arrayProperty, arrayType);
}
/**
* Creates an array property from a comma separated list.
*
- * @param tikaKey
- * Key in the Tika metadata map
- * @param ns
- * namespace the property should be created in
- * @param propertyName
- * name of the property
- * @param arrayType
- * depicts which kind of array shall be created
- * @throws XMPException
- * if the property could not be created
+ * @param tikaKey Key in the Tika metadata map
+ * @param ns namespace the property should be created in
+ * @param propertyName name of the property
+ * @param arrayType depicts which kind of array shall be created
+ * @throws XMPException if the property could not be created
*/
protected void createCommaSeparatedArray(String tikaKey, String ns, String propertyName,
- int arrayType) throws XMPException {
- String value = metadata.get( tikaKey );
+ int arrayType) throws XMPException {
+ String value = metadata.get(tikaKey);
if (value != null && value.length() > 0) {
- XMPUtils.separateArrayItems( meta, ns, propertyName, value, new PropertyOptions(
- arrayType ), false );
+ XMPUtils.separateArrayItems(meta, ns, propertyName, value,
+ new PropertyOptions(arrayType), false);
}
}
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/GenericConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/GenericConverter.java
index 3059e0e2f..981626515 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/GenericConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/GenericConverter.java
@@ -20,19 +20,19 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.XMPMetaFactory;
+import com.adobe.internal.xmp.XMPSchemaRegistry;
+import com.adobe.internal.xmp.options.PropertyOptions;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.DublinCore;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.Property;
+import org.apache.tika.metadata.Property.PropertyType;
import org.apache.tika.metadata.TikaCoreProperties;
import org.apache.tika.metadata.XMPRights;
-import org.apache.tika.metadata.Property.PropertyType;
-
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.XMPMetaFactory;
-import com.adobe.internal.xmp.XMPSchemaRegistry;
-import com.adobe.internal.xmp.options.PropertyOptions;
/**
* Trys to convert as much of the properties in the <code>Metadata</code> map to XMP namespaces.
@@ -47,46 +47,44 @@ public class GenericConverter extends AbstractConverter {
@Override
public XMPMeta process(Metadata metadata) throws XMPException {
- setMetadata( metadata );
+ setMetadata(metadata);
XMPSchemaRegistry registry = XMPMetaFactory.getSchemaRegistry();
String[] keys = metadata.names();
for (String key : keys) {
- String[] keyParts = key.split( TikaCoreProperties.NAMESPACE_PREFIX_DELIMITER );
+ String[] keyParts = key.split(TikaCoreProperties.NAMESPACE_PREFIX_DELIMITER);
if (keyParts.length > 0 && keyParts.length <= 2) {
- String uri = registry.getNamespaceURI( keyParts[0] );
+ String uri = registry.getNamespaceURI(keyParts[0]);
if (uri != null) {
// Tika properties where the type differs from the XMP specification
- if (key.equals( DublinCore.TITLE.getName() )
- || key.equals( DublinCore.DESCRIPTION.getName() )
- || key.equals( XMPRights.USAGE_TERMS.getName() )) {
- createLangAltProperty( key, uri, keyParts[1] );
- }
- else if (key.equals( DublinCore.CREATOR.getName() )) {
- createArrayProperty( key, uri, keyParts[1], PropertyOptions.ARRAY_ORDERED );
- }
- else {
- PropertyType type = Property.getPropertyType( key );
+ if (key.equals(DublinCore.TITLE.getName()) ||
+ key.equals(DublinCore.DESCRIPTION.getName()) ||
+ key.equals(XMPRights.USAGE_TERMS.getName())) {
+ createLangAltProperty(key, uri, keyParts[1]);
+ } else if (key.equals(DublinCore.CREATOR.getName())) {
+ createArrayProperty(key, uri, keyParts[1], PropertyOptions.ARRAY_ORDERED);
+ } else {
+ PropertyType type = Property.getPropertyType(key);
if (type != null) {
switch (type) {
case SIMPLE:
- createProperty( key, uri, keyParts[1] );
+ createProperty(key, uri, keyParts[1]);
break;
case BAG:
- createArrayProperty( key, uri, keyParts[1],
- PropertyOptions.ARRAY );
+ createArrayProperty(key, uri, keyParts[1],
+ PropertyOptions.ARRAY);
break;
case SEQ:
- createArrayProperty( key, uri, keyParts[1],
- PropertyOptions.ARRAY_ORDERED );
+ createArrayProperty(key, uri, keyParts[1],
+ PropertyOptions.ARRAY_ORDERED);
break;
case ALT:
- createArrayProperty( key, uri, keyParts[1],
- PropertyOptions.ARRAY_ALTERNATE );
+ createArrayProperty(key, uri, keyParts[1],
+ PropertyOptions.ARRAY_ALTERNATE);
break;
- // TODO Add support for structs and lang-alts, but those types are
- // currently not used in Tika
+ // TODO Add support for structs and lang-alts, but those types are
+ // currently not used in Tika
}
}
}
@@ -100,6 +98,6 @@ public class GenericConverter extends AbstractConverter {
@Override
public Set<Namespace> getAdditionalNamespaces() {
// no additional namespaces needed
- return Collections.unmodifiableSet(new HashSet<>() );
+ return Collections.unmodifiableSet(new HashSet<>());
}
}
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/ITikaToXMPConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/ITikaToXMPConverter.java
index 0dc9eedd6..d131df012 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/ITikaToXMPConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/ITikaToXMPConverter.java
@@ -16,11 +16,11 @@
*/
package org.apache.tika.xmp.convert;
-import org.apache.tika.metadata.Metadata;
-
import com.adobe.internal.xmp.XMPException;
import com.adobe.internal.xmp.XMPMeta;
+import org.apache.tika.metadata.Metadata;
+
/**
* Interface for the specific <code>Metadata</code> to XMP converters
*/
@@ -29,11 +29,9 @@ public interface ITikaToXMPConverter {
* Converts a Tika {@link Metadata}-object into an {@link XMPMeta} containing the useful
* properties.
*
- * @param metadata
- * a Tika Metadata object
+ * @param metadata a Tika Metadata object
* @return Returns an XMPMeta object.
- * @throws XMPException
- * If an error occurs during the creation of the XMP object.
+ * @throws XMPException If an error occurs during the creation of the XMP object.
*/
XMPMeta process(Metadata metadata) throws XMPException;
}
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeBinaryConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeBinaryConverter.java
index 0338ded61..05ea4b034 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeBinaryConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeBinaryConverter.java
@@ -21,6 +21,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import com.adobe.internal.xmp.XMPConst;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.options.PropertyOptions;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
@@ -29,57 +34,52 @@ import org.apache.tika.metadata.OfficeOpenXMLCore;
import org.apache.tika.metadata.OfficeOpenXMLExtended;
import org.apache.tika.metadata.TikaCoreProperties;
-import com.adobe.internal.xmp.XMPConst;
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.options.PropertyOptions;
-
/**
* Tika to XMP mapping for the binary MS formats Word (.doc), Excel (.xls) and PowerPoint (.ppt).
*/
public class MSOfficeBinaryConverter extends AbstractConverter {
+ protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections.unmodifiableSet(
+ new HashSet<>(Arrays.asList(
+ new Namespace(OfficeOpenXMLCore.NAMESPACE_URI, OfficeOpenXMLCore.PREFIX),
+ new Namespace(OfficeOpenXMLExtended.NAMESPACE_URI,
+ OfficeOpenXMLExtended.PREFIX))));
+
public MSOfficeBinaryConverter() throws TikaException {
super();
}
- protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections
- .unmodifiableSet(new HashSet<>(Arrays.asList(new Namespace(
- OfficeOpenXMLCore.NAMESPACE_URI, OfficeOpenXMLCore.PREFIX), new Namespace(
- OfficeOpenXMLExtended.NAMESPACE_URI, OfficeOpenXMLExtended.PREFIX))) );
-
/**
- * @throws XMPException
- * Forwards XMP errors
+ * @throws XMPException Forwards XMP errors
* @see ITikaToXMPConverter#process(Metadata)
*/
public XMPMeta process(Metadata metadata) throws XMPException {
- super.setMetadata( metadata );
+ super.setMetadata(metadata);
// For all formats, Tika uses the same keys
- createProperty( HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format" );
- createProperty( OfficeOpenXMLExtended.APPLICATION, XMPConst.NS_XMP, "CreatorTool" );
- createCommaSeparatedArray( TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
- PropertyOptions.ARRAY_ORDERED );
- createProperty( OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre" );
- createProperty( TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate" );
- createProperty( Office.CHARACTER_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Characters" );
- createProperty( TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments" );
- createProperty( OfficeOpenXMLExtended.COMPANY, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Company" );
- createCommaSeparatedArray( TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
- PropertyOptions.ARRAY );
- createLangAltProperty( TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description" );
- createProperty( TikaCoreProperties.LANGUAGE, OfficeOpenXMLCore.NAMESPACE_URI, "language" );
- createProperty( TikaCoreProperties.PRINT_DATE, OfficeOpenXMLCore.NAMESPACE_URI,
- "lastPrinted" );
- createProperty( TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate" );
- createProperty( Office.PAGE_COUNT, XMPConst.TYPE_PAGEDFILE, "NPages" );
- createProperty( OfficeOpenXMLCore.REVISION, OfficeOpenXMLCore.NAMESPACE_URI, "revision" );
- createProperty( Office.SLIDE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Pages" );
- createProperty( OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Template" );
- createLangAltProperty( TikaCoreProperties.TITLE, XMPConst.NS_DC, "title" );
- createProperty( Office.WORD_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Words" );
+ createProperty(HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format");
+ createProperty(OfficeOpenXMLExtended.APPLICATION, XMPConst.NS_XMP, "CreatorTool");
+ createCommaSeparatedArray(TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
+ PropertyOptions.ARRAY_ORDERED);
+ createProperty(OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre");
+ createProperty(TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate");
+ createProperty(Office.CHARACTER_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Characters");
+ createProperty(TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments");
+ createProperty(OfficeOpenXMLExtended.COMPANY, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Company");
+ createCommaSeparatedArray(TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
+ PropertyOptions.ARRAY);
+ createLangAltProperty(TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description");
+ createProperty(TikaCoreProperties.LANGUAGE, OfficeOpenXMLCore.NAMESPACE_URI, "language");
+ createProperty(TikaCoreProperties.PRINT_DATE, OfficeOpenXMLCore.NAMESPACE_URI,
+ "lastPrinted");
+ createProperty(TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate");
+ createProperty(Office.PAGE_COUNT, XMPConst.TYPE_PAGEDFILE, "NPages");
+ createProperty(OfficeOpenXMLCore.REVISION, OfficeOpenXMLCore.NAMESPACE_URI, "revision");
+ createProperty(Office.SLIDE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Pages");
+ createProperty(OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Template");
+ createLangAltProperty(TikaCoreProperties.TITLE, XMPConst.NS_DC, "title");
+ createProperty(Office.WORD_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Words");
// Not mapped: (MSOffice) Edit-Time ???
// Not mapped: (MSOffice) Last-Author ???
// not mapped: (MSOffice) Security ???
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeXMLConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeXMLConverter.java
index 6d133c375..6d8d30bce 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeXMLConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/MSOfficeXMLConverter.java
@@ -21,6 +21,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import com.adobe.internal.xmp.XMPConst;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.options.PropertyOptions;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
@@ -29,20 +34,16 @@ import org.apache.tika.metadata.OfficeOpenXMLCore;
import org.apache.tika.metadata.OfficeOpenXMLExtended;
import org.apache.tika.metadata.TikaCoreProperties;
-import com.adobe.internal.xmp.XMPConst;
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.options.PropertyOptions;
-
/**
* Tika to XMP mapping for the Office Open XML formats Word (.docx), Excel (.xlsx) and PowerPoint
* (.pptx).
*/
public class MSOfficeXMLConverter extends AbstractConverter {
- protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections
- .unmodifiableSet(new HashSet<>(Arrays.asList(new Namespace(
- OfficeOpenXMLCore.NAMESPACE_URI, OfficeOpenXMLCore.PREFIX), new Namespace(
- OfficeOpenXMLExtended.NAMESPACE_URI, OfficeOpenXMLExtended.PREFIX))) );
+ protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections.unmodifiableSet(
+ new HashSet<>(Arrays.asList(
+ new Namespace(OfficeOpenXMLCore.NAMESPACE_URI, OfficeOpenXMLCore.PREFIX),
+ new Namespace(OfficeOpenXMLExtended.NAMESPACE_URI,
+ OfficeOpenXMLExtended.PREFIX))));
public MSOfficeXMLConverter() throws TikaException {
super();
@@ -50,69 +51,69 @@ public class MSOfficeXMLConverter extends AbstractConverter {
@Override
public XMPMeta process(Metadata metadata) throws XMPException {
- super.setMetadata( metadata );
+ super.setMetadata(metadata);
- createProperty( HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format" );
+ createProperty(HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format");
// Core Properties
- createProperty( OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre" );
- createProperty( OfficeOpenXMLCore.CONTENT_STATUS, OfficeOpenXMLCore.NAMESPACE_URI,
- "contentStatus" );
- createProperty( TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate" );
- createCommaSeparatedArray( TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
- PropertyOptions.ARRAY_ORDERED );
- createProperty( TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments" );
- createProperty( TikaCoreProperties.IDENTIFIER, XMPConst.NS_DC, "identifier" );
- createCommaSeparatedArray( TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
- PropertyOptions.ARRAY );
- createLangAltProperty( TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description" );
- createProperty( TikaCoreProperties.LANGUAGE, XMPConst.NS_DC, "language" );
- createProperty( TikaCoreProperties.MODIFIER, OfficeOpenXMLCore.NAMESPACE_URI,
- "lastModifiedBy" );
- createProperty( TikaCoreProperties.PRINT_DATE, OfficeOpenXMLCore.NAMESPACE_URI,
- "lastPrinted" );
- createProperty( TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate" );
- createProperty( OfficeOpenXMLCore.REVISION, OfficeOpenXMLCore.NAMESPACE_URI, "revision" );
- createLangAltProperty( TikaCoreProperties.TITLE, XMPConst.NS_DC, "title" );
- createProperty( OfficeOpenXMLCore.VERSION, OfficeOpenXMLCore.NAMESPACE_URI, "version" );
+ createProperty(OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre");
+ createProperty(OfficeOpenXMLCore.CONTENT_STATUS, OfficeOpenXMLCore.NAMESPACE_URI,
+ "contentStatus");
+ createProperty(TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate");
+ createCommaSeparatedArray(TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
+ PropertyOptions.ARRAY_ORDERED);
+ createProperty(TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments");
+ createProperty(TikaCoreProperties.IDENTIFIER, XMPConst.NS_DC, "identifier");
+ createCommaSeparatedArray(TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
+ PropertyOptions.ARRAY);
+ createLangAltProperty(TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description");
+ createProperty(TikaCoreProperties.LANGUAGE, XMPConst.NS_DC, "language");
+ createProperty(TikaCoreProperties.MODIFIER, OfficeOpenXMLCore.NAMESPACE_URI,
+ "lastModifiedBy");
+ createProperty(TikaCoreProperties.PRINT_DATE, OfficeOpenXMLCore.NAMESPACE_URI,
+ "lastPrinted");
+ createProperty(TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate");
+ createProperty(OfficeOpenXMLCore.REVISION, OfficeOpenXMLCore.NAMESPACE_URI, "revision");
+ createLangAltProperty(TikaCoreProperties.TITLE, XMPConst.NS_DC, "title");
+ createProperty(OfficeOpenXMLCore.VERSION, OfficeOpenXMLCore.NAMESPACE_URI, "version");
// Extended Properties
// Put both App name and version in xmp:CreatorTool
String creatorTool = "";
- String value = metadata.get( OfficeOpenXMLExtended.APPLICATION );
+ String value = metadata.get(OfficeOpenXMLExtended.APPLICATION);
if (value != null && value.length() > 0) {
creatorTool = value;
- value = metadata.get( OfficeOpenXMLExtended.APP_VERSION );
+ value = metadata.get(OfficeOpenXMLExtended.APP_VERSION);
if (value != null && value.length() > 0) {
creatorTool += " " + value;
}
}
if (creatorTool.length() > 0) {
- meta.setProperty( XMPConst.NS_XMP, "CreatorTool", creatorTool );
+ meta.setProperty(XMPConst.NS_XMP, "CreatorTool", creatorTool);
}
- createProperty( Office.CHARACTER_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Characters" );
- createProperty( Office.CHARACTER_COUNT_WITH_SPACES, OfficeOpenXMLExtended.NAMESPACE_URI,
- "CharactersWithSpaces" );
- createProperty( TikaCoreProperties.PUBLISHER, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Company" );
- createProperty( Office.LINE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Lines" );
- createProperty( OfficeOpenXMLExtended.MANAGER, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Manager" );
- createProperty( OfficeOpenXMLExtended.NOTES, OfficeOpenXMLExtended.NAMESPACE_URI, "Notes" );
- createProperty( Office.PAGE_COUNT, XMPConst.TYPE_PAGEDFILE, "NPages" );
- createProperty( Office.PARAGRAPH_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Paragraphs" );
- createProperty( OfficeOpenXMLExtended.PRESENTATION_FORMAT,
- OfficeOpenXMLExtended.NAMESPACE_URI, "PresentationFormat" );
- createProperty( Office.SLIDE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Slides" );
- createProperty( OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Template" );
- createProperty( OfficeOpenXMLExtended.TOTAL_TIME, OfficeOpenXMLExtended.NAMESPACE_URI,
- "TotalTime" );
- createProperty( Office.WORD_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Words" );
+ createProperty(Office.CHARACTER_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Characters");
+ createProperty(Office.CHARACTER_COUNT_WITH_SPACES, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "CharactersWithSpaces");
+ createProperty(TikaCoreProperties.PUBLISHER, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Company");
+ createProperty(Office.LINE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Lines");
+ createProperty(OfficeOpenXMLExtended.MANAGER, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Manager");
+ createProperty(OfficeOpenXMLExtended.NOTES, OfficeOpenXMLExtended.NAMESPACE_URI, "Notes");
+ createProperty(Office.PAGE_COUNT, XMPConst.TYPE_PAGEDFILE, "NPages");
+ createProperty(Office.PARAGRAPH_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Paragraphs");
+ createProperty(OfficeOpenXMLExtended.PRESENTATION_FORMAT,
+ OfficeOpenXMLExtended.NAMESPACE_URI, "PresentationFormat");
+ createProperty(Office.SLIDE_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Slides");
+ createProperty(OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Template");
+ createProperty(OfficeOpenXMLExtended.TOTAL_TIME, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "TotalTime");
+ createProperty(Office.WORD_COUNT, OfficeOpenXMLExtended.NAMESPACE_URI, "Words");
return super.getXMPMeta();
}
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/OpenDocumentConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/OpenDocumentConverter.java
index e6a16339c..559a18fcf 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/OpenDocumentConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/OpenDocumentConverter.java
@@ -20,6 +20,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import com.adobe.internal.xmp.XMPConst;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.options.PropertyOptions;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
@@ -28,55 +33,50 @@ import org.apache.tika.metadata.OfficeOpenXMLExtended;
import org.apache.tika.metadata.PagedText;
import org.apache.tika.metadata.TikaCoreProperties;
-import com.adobe.internal.xmp.XMPConst;
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.options.PropertyOptions;
-
/**
* Tika to XMP mapping for the Open Document formats: Text (.odt), Spreatsheet (.ods), Graphics
* (.odg) and Presentation (.odp).
*/
public class OpenDocumentConverter extends AbstractConverter {
- protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections
- .unmodifiableSet(new HashSet<>(Collections.singletonList(new Namespace(
- Office.NAMESPACE_URI_DOC_META, Office.PREFIX_DOC_META))) );
+ protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections.unmodifiableSet(
+ new HashSet<>(Collections.singletonList(
+ new Namespace(Office.NAMESPACE_URI_DOC_META, Office.PREFIX_DOC_META))));
public OpenDocumentConverter() throws TikaException {
super();
}
/**
- * @throws XMPException
- * Forwards XMP errors
+ * @throws XMPException Forwards XMP errors
* @see ITikaToXMPConverter#process(Metadata)
*/
@Override
public XMPMeta process(Metadata metadata) throws XMPException {
- super.setMetadata( metadata );
+ super.setMetadata(metadata);
- createProperty( HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format" );
+ createProperty(HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format");
- createProperty( Office.CHARACTER_COUNT, Office.NAMESPACE_URI_DOC_META, "character-count" );
- createProperty( TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate" );
- createCommaSeparatedArray( TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
- PropertyOptions.ARRAY_ORDERED );
- createProperty( TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate" );
- createProperty( TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments" );
- createCommaSeparatedArray( TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
- PropertyOptions.ARRAY );
- createLangAltProperty( TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description" );
- createProperty( OfficeOpenXMLExtended.TOTAL_TIME, Office.NAMESPACE_URI_DOC_META, "editing-duration" );
- createProperty( "editing-cycles", Office.NAMESPACE_URI_DOC_META, "editing-cycles" );
- createProperty( "generator", XMPConst.NS_XMP, "CreatorTool" );
- createProperty( Office.IMAGE_COUNT, Office.NAMESPACE_URI_DOC_META, "image-count" );
- createProperty( "initial-creator", Office.NAMESPACE_URI_DOC_META, "initial-creator" );
- createProperty( Office.OBJECT_COUNT, Office.NAMESPACE_URI_DOC_META, "object-count" );
- createProperty( PagedText.N_PAGES, XMPConst.TYPE_PAGEDFILE, "NPages" );
- createProperty( Office.PARAGRAPH_COUNT, Office.NAMESPACE_URI_DOC_META, "paragraph-count" );
- createProperty( Office.TABLE_COUNT, Office.NAMESPACE_URI_DOC_META, "table-count" );
- createLangAltProperty( TikaCoreProperties.TITLE, XMPConst.NS_DC, "title" );
- createProperty( Office.WORD_COUNT, Office.NAMESPACE_URI_DOC_META, "word-count" );
+ createProperty(Office.CHARACTER_COUNT, Office.NAMESPACE_URI_DOC_META, "character-count");
+ createProperty(TikaCoreProperties.CREATED, XMPConst.NS_XMP, "CreateDate");
+ createCommaSeparatedArray(TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
+ PropertyOptions.ARRAY_ORDERED);
+ createProperty(TikaCoreProperties.MODIFIED, XMPConst.NS_XMP, "ModifyDate");
+ createProperty(TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments");
+ createCommaSeparatedArray(TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
+ PropertyOptions.ARRAY);
+ createLangAltProperty(TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description");
+ createProperty(OfficeOpenXMLExtended.TOTAL_TIME, Office.NAMESPACE_URI_DOC_META,
+ "editing-duration");
+ createProperty("editing-cycles", Office.NAMESPACE_URI_DOC_META, "editing-cycles");
+ createProperty("generator", XMPConst.NS_XMP, "CreatorTool");
+ createProperty(Office.IMAGE_COUNT, Office.NAMESPACE_URI_DOC_META, "image-count");
+ createProperty("initial-creator", Office.NAMESPACE_URI_DOC_META, "initial-creator");
+ createProperty(Office.OBJECT_COUNT, Office.NAMESPACE_URI_DOC_META, "object-count");
+ createProperty(PagedText.N_PAGES, XMPConst.TYPE_PAGEDFILE, "NPages");
+ createProperty(Office.PARAGRAPH_COUNT, Office.NAMESPACE_URI_DOC_META, "paragraph-count");
+ createProperty(Office.TABLE_COUNT, Office.NAMESPACE_URI_DOC_META, "table-count");
+ createLangAltProperty(TikaCoreProperties.TITLE, XMPConst.NS_DC, "title");
+ createProperty(Office.WORD_COUNT, Office.NAMESPACE_URI_DOC_META, "word-count");
// duplicate properties not mapped:
// nbImg | 0
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/RTFConverter.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/RTFConverter.java
index f05e10f19..80d29d669 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/RTFConverter.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/RTFConverter.java
@@ -20,6 +20,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import com.adobe.internal.xmp.XMPConst;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.options.PropertyOptions;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.HttpHeaders;
import org.apache.tika.metadata.Metadata;
@@ -27,18 +32,14 @@ import org.apache.tika.metadata.OfficeOpenXMLCore;
import org.apache.tika.metadata.OfficeOpenXMLExtended;
import org.apache.tika.metadata.TikaCoreProperties;
-import com.adobe.internal.xmp.XMPConst;
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.options.PropertyOptions;
-
/**
* Tika to XMP mapping for the RTF format.
*/
public class RTFConverter extends AbstractConverter {
- protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections
- .unmodifiableSet(new HashSet<>(Collections.singletonList(new Namespace(
- OfficeOpenXMLExtended.NAMESPACE_URI, OfficeOpenXMLExtended.PREFIX))) );
+ protected static final Set<Namespace> ADDITIONAL_NAMESPACES = Collections.unmodifiableSet(
+ new HashSet<>(Collections.singletonList(
+ new Namespace(OfficeOpenXMLExtended.NAMESPACE_URI,
+ OfficeOpenXMLExtended.PREFIX))));
public RTFConverter() throws TikaException {
super();
@@ -46,24 +47,24 @@ public class RTFConverter extends AbstractConverter {
@Override
public XMPMeta process(Metadata metadata) throws XMPException {
- setMetadata( metadata );
+ setMetadata(metadata);
- createProperty( HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format" );
+ createProperty(HttpHeaders.CONTENT_TYPE, XMPConst.NS_DC, "format");
- createCommaSeparatedArray( TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
- PropertyOptions.ARRAY_ORDERED );
- createLangAltProperty( TikaCoreProperties.TITLE, XMPConst.NS_DC, "title" );
- createLangAltProperty( TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description" );
- createCommaSeparatedArray( TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
- PropertyOptions.ARRAY );
- createProperty( OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre" );
- createProperty( OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Template" );
- createProperty( TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments" );
- createProperty( OfficeOpenXMLExtended.COMPANY, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Company" );
- createProperty( OfficeOpenXMLExtended.MANAGER, OfficeOpenXMLExtended.NAMESPACE_URI,
- "Manager" );
+ createCommaSeparatedArray(TikaCoreProperties.CREATOR, XMPConst.NS_DC, "creator",
+ PropertyOptions.ARRAY_ORDERED);
+ createLangAltProperty(TikaCoreProperties.TITLE, XMPConst.NS_DC, "title");
+ createLangAltProperty(TikaCoreProperties.DESCRIPTION, XMPConst.NS_DC, "description");
+ createCommaSeparatedArray(TikaCoreProperties.SUBJECT, XMPConst.NS_DC, "subject",
+ PropertyOptions.ARRAY);
+ createProperty(OfficeOpenXMLCore.CATEGORY, XMPConst.NS_IPTCCORE, "intellectualGenre");
+ createProperty(OfficeOpenXMLExtended.TEMPLATE, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Template");
+ createProperty(TikaCoreProperties.COMMENTS, XMPConst.NS_PDFX, "Comments");
+ createProperty(OfficeOpenXMLExtended.COMPANY, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Company");
+ createProperty(OfficeOpenXMLExtended.MANAGER, OfficeOpenXMLExtended.NAMESPACE_URI,
+ "Manager");
return getXMPMeta();
}
diff --git a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/TikaToXMP.java b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/TikaToXMP.java
index 0475a3463..4c891d1a4 100644
--- a/tika-xmp/src/main/java/org/apache/tika/xmp/convert/TikaToXMP.java
+++ b/tika-xmp/src/main/java/org/apache/tika/xmp/convert/TikaToXMP.java
@@ -20,6 +20,10 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import com.adobe.internal.xmp.XMPException;
+import com.adobe.internal.xmp.XMPMeta;
+import com.adobe.internal.xmp.XMPMetaFactory;
+
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaCoreProperties;
@@ -30,10 +34,6 @@ import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
import org.apache.tika.parser.microsoft.rtf.RTFParser;
import org.apache.tika.parser.odf.OpenDocumentParser;
-import com.adobe.internal.xmp.XMPException;
-import com.adobe.internal.xmp.XMPMeta;
-import com.adobe.internal.xmp.XMPMetaFactory;
-
public class TikaToXMP {
/**
* Map from mimetype to converter class Must only be accessed through
@@ -49,19 +49,19 @@ public class TikaToXMP {
/**
* @see TikaToXMP#convert(Metadata, String) But the mimetype is retrieved from the metadata
- * map.
+ * map.
*/
public static XMPMeta convert(Metadata tikaMetadata) throws TikaException {
if (tikaMetadata == null) {
- throw new IllegalArgumentException( "Metadata parameter must not be null" );
+ throw new IllegalArgumentException("Metadata parameter must not be null");
}
- String mimetype = tikaMetadata.get( Metadata.CONTENT_TYPE );
+ String mimetype = tikaMetadata.get(Metadata.CONTENT_TYPE);
if (mimetype == null) {
- mimetype = tikaMetadata.get( TikaCoreProperties.FORMAT );
+ mimetype = tikaMetadata.get(TikaCoreProperties.FORMAT);
}
- return convert( tikaMetadata, mimetype );
+ return convert(tikaMetadata, mimetype);
}
/**
@@ -71,24 +71,21 @@ public class TikaToXMP {
* convert only those properties that are in known namespaces and are using the correct
* prefixes.
*
- * @param tikaMetadata
- * the Metadata map from Tika
- * @param mimetype
- * depicts the format's converter to use
+ * @param tikaMetadata the Metadata map from Tika
+ * @param mimetype depicts the format's converter to use
* @return XMP object
* @throws TikaException
*/
public static XMPMeta convert(Metadata tikaMetadata, String mimetype) throws TikaException {
if (tikaMetadata == null) {
- throw new IllegalArgumentException( "Metadata parameter must not be null" );
+ throw new IllegalArgumentException("Metadata parameter must not be null");
}
ITikaToXMPConverter converter = null;
- if (isConverterAvailable( mimetype )) {
- converter = getConverter( mimetype );
- }
- else {
+ if (isConverterAvailable(mimetype)) {
+ converter = getConverter(mimetype);
+ } else {
converter = new GenericConverter();
}
@@ -96,13 +93,11 @@ public class TikaToXMP {
if (converter != null) {
try {
- xmp = converter.process( tikaMetadata );
+ xmp = converter.process(tikaMetadata);
+ } catch (XMPException e) {
+ throw new TikaException("Tika metadata could not be converted to XMP", e);
}
- catch (XMPException e) {
- throw new TikaException( "Tika metadata could not be converted to XMP", e );
- }
- }
- else {
+ } else {
xmp = XMPMetaFactory.create(); // empty packet
}
@@ -112,15 +107,14 @@ public class TikaToXMP {
/**
* Check if there is a converter available which allows to convert the Tika metadata to XMP
*
- * @param mimetype
- * the Mimetype
+ * @param mimetype the Mimetype
* @return true if the Metadata object can be converted or false if not
*/
public static boolean isConverterAvailable(String mimetype) {
- MediaType type = MediaType.parse( mimetype );
+ MediaType type = MediaType.parse(mimetype);
if (type != null) {
- return (getConverterMap().get( type ) != null);
+ return (getConverterMap().get(type) != null);
}
return false;
@@ -129,30 +123,28 @@ public class TikaToXMP {
/**
* Retrieve a specific converter according to the mimetype
*
- * @param mimetype
- * the Mimetype
+ * @param mimetype the Mimetype
* @return the converter or null, if none exists
* @throws TikaException
*/
public static ITikaToXMPConverter getConverter(String mimetype) throws TikaException {
if (mimetype == null) {
- throw new IllegalArgumentException( "mimetype must not be null" );
+ throw new IllegalArgumentException("mimetype must not be null");
}
ITikaToXMPConverter converter = null;
- MediaType type = MediaType.parse( mimetype );
+ MediaType type = MediaType.parse(mimetype);
if (type != null) {
- Class<? extends ITikaToXMPConverter> clazz = getConverterMap().get( type );
+ Class<? extends ITikaToXMPConverter> clazz = getConverterMap().get(type);
if (clazz != null) {
try {
converter = clazz.newInstance();
- }
- catch (Exception e) {
+ } catch (Exception e) {
throw new TikaException(
- "TikaToXMP converter class cannot be instantiated for mimetype: "
- + type.toString(), e );
+ "TikaToXMP converter class cannot be instantiated for mimetype: " +
+ type.toString(), e);
}
}
}
@@ -178,25 +170,24 @@ public class TikaToXMP {
ParseContext parseContext = new ParseContext();
// MS Office Binary File Format
- addConverter( new OfficeParser().getSupportedTypes( parseContext ),
- MSOfficeBinaryConverter.class );
+ addConverter(new OfficeParser().getSupportedTypes(parseContext),
+ MSOfficeBinaryConverter.class);
// Rich Text Format
- addConverter( new RTFParser().getSupportedTypes( parseContext ), RTFConverter.class );
+ addConverter(new RTFParser().getSupportedTypes(parseContext), RTFConverter.class);
// MS Open XML Format
- addConverter( new OOXMLParser().getSupportedTypes( parseContext ),
- MSOfficeXMLConverter.class );
+ addConverter(new OOXMLParser().getSupportedTypes(parseContext), MSOfficeXMLConverter.class);
// Open document format
- addConverter( new OpenDocumentParser().getSupportedTypes( parseContext ),
- OpenDocumentConverter.class );
+ addConverter(new OpenDocumentParser().getSupportedTypes(parseContext),
+ OpenDocumentConverter.class);
}
private static void addConverter(Set<MediaType> supportedTypes,
- Class<? extends ITikaToXMPConverter> converter) {
+ Class<? extends ITikaToXMPConverter> converter) {
for (MediaType type : supportedTypes) {
- getConverterMap().put( type, converter );
+ getConverterMap().put(type, converter);
}
}
}
diff --git a/tika-xmp/src/test/java/org/apache/tika/xmp/TikaToXMPTest.java b/tika-xmp/src/test/java/org/apache/tika/xmp/TikaToXMPTest.java
index 7f92db295..b16358ee8 100644
--- a/tika-xmp/src/test/java/org/apache/tika/xmp/TikaToXMPTest.java
+++ b/tika-xmp/src/test/java/org/apache/tika/xmp/TikaToXMPTest.java
@@ -23,14 +23,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.OfficeOpenXMLCore;
-import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.xmp.convert.ITikaToXMPConverter;
-import org.apache.tika.xmp.convert.MSOfficeXMLConverter;
-import org.apache.tika.xmp.convert.TikaToXMP;
-
import com.adobe.internal.xmp.XMPConst;
import com.adobe.internal.xmp.XMPException;
import com.adobe.internal.xmp.XMPIterator;
@@ -40,14 +32,22 @@ import com.adobe.internal.xmp.properties.XMPProperty;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.OfficeOpenXMLCore;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.xmp.convert.ITikaToXMPConverter;
+import org.apache.tika.xmp.convert.MSOfficeXMLConverter;
+import org.apache.tika.xmp.convert.TikaToXMP;
+
/**
* Tests the Tika <code>Metadata</code> to XMP conversion functionatlity
*/
public class TikaToXMPTest {
- private Metadata tikaMetadata;
-
- private static final String OOXML_MIMETYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ private static final String OOXML_MIMETYPE =
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
private static final String GENERIC_MIMETYPE = "generic/mimetype";
+ private Metadata tikaMetadata;
// --- Set up ---
@BeforeEach
@@ -57,166 +57,166 @@ public class TikaToXMPTest {
private void setupOOXMLMetadata(Metadata metadata) {
// simple property
- metadata.set( TikaCoreProperties.LANGUAGE, "language" );
+ metadata.set(TikaCoreProperties.LANGUAGE, "language");
// language alternative
- metadata.set( TikaCoreProperties.TITLE, "title" );
+ metadata.set(TikaCoreProperties.TITLE, "title");
// comma separated array
- metadata.set( TikaCoreProperties.SUBJECT, "keyword1,keyword2" );
+ metadata.set(TikaCoreProperties.SUBJECT, "keyword1,keyword2");
// OOXML specific simple prop
- metadata.set( TikaCoreProperties.MODIFIER, "lastModifiedBy" );
+ metadata.set(TikaCoreProperties.MODIFIER, "lastModifiedBy");
}
private void checkOOXMLMetadata(XMPMeta xmp) throws XMPException {
// check simple property
- XMPProperty prop = xmp.getProperty( XMPConst.NS_DC, "language" );
- assertNotNull( prop );
- assertEquals( "language", prop.getValue() );
+ XMPProperty prop = xmp.getProperty(XMPConst.NS_DC, "language");
+ assertNotNull(prop);
+ assertEquals("language", prop.getValue());
// check lang alt
- prop = xmp.getLocalizedText( XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT );
- assertNotNull( prop );
- assertEquals( "title", prop.getValue() );
+ prop = xmp.getLocalizedText(XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT);
+ assertNotNull(prop);
+ assertEquals("title", prop.getValue());
// check array
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 1 );
- assertNotNull( prop );
- assertEquals( "keyword1", prop.getValue() );
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 2 );
- assertNotNull( prop );
- assertEquals( "keyword2", prop.getValue() );
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 1);
+ assertNotNull(prop);
+ assertEquals("keyword1", prop.getValue());
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 2);
+ assertNotNull(prop);
+ assertEquals("keyword2", prop.getValue());
// check OOXML specific simple property
- prop = xmp.getProperty( OfficeOpenXMLCore.NAMESPACE_URI, "lastModifiedBy" );
- assertNotNull( prop );
- assertEquals( "lastModifiedBy", prop.getValue() );
+ prop = xmp.getProperty(OfficeOpenXMLCore.NAMESPACE_URI, "lastModifiedBy");
+ assertNotNull(prop);
+ assertEquals("lastModifiedBy", prop.getValue());
}
// --- TESTS ---
@Test
- public void convert_OOXMLMetadataWithMimetype_everythingConverted() throws XMPException,
- TikaException {
- setupOOXMLMetadata( tikaMetadata );
- tikaMetadata.set( Metadata.CONTENT_TYPE, OOXML_MIMETYPE );
+ public void convert_OOXMLMetadataWithMimetype_everythingConverted()
+ throws XMPException, TikaException {
+ setupOOXMLMetadata(tikaMetadata);
+ tikaMetadata.set(Metadata.CONTENT_TYPE, OOXML_MIMETYPE);
- XMPMeta xmp = TikaToXMP.convert( tikaMetadata );
+ XMPMeta xmp = TikaToXMP.convert(tikaMetadata);
- checkOOXMLMetadata( xmp );
+ checkOOXMLMetadata(xmp);
}
@Test
- public void convert_OOXMLMetadataWithExtraMimetype_everythingConverted() throws XMPException,
- TikaException {
- setupOOXMLMetadata( tikaMetadata );
+ public void convert_OOXMLMetadataWithExtraMimetype_everythingConverted()
+ throws XMPException, TikaException {
+ setupOOXMLMetadata(tikaMetadata);
- XMPMeta xmp = TikaToXMP.convert( tikaMetadata, OOXML_MIMETYPE );
+ XMPMeta xmp = TikaToXMP.convert(tikaMetadata, OOXML_MIMETYPE);
- checkOOXMLMetadata( xmp );
+ checkOOXMLMetadata(xmp);
}
@Test
public void convert_OOXMLMetadataWithoutMimetype_onlyGeneralMetadataconverted()
throws XMPException, TikaException {
- setupOOXMLMetadata( tikaMetadata );
+ setupOOXMLMetadata(tikaMetadata);
- XMPMeta xmp = TikaToXMP.convert( tikaMetadata, null );
+ XMPMeta xmp = TikaToXMP.convert(tikaMetadata, null);
// general metadata is converted
// check simple property
- XMPProperty prop = xmp.getProperty( XMPConst.NS_DC, "language" );
- assertNotNull( prop );
- assertEquals( "language", prop.getValue() );
+ XMPProperty prop = xmp.getProperty(XMPConst.NS_DC, "language");
+ assertNotNull(prop);
+ assertEquals("language", prop.getValue());
// check lang alt
- prop = xmp.getLocalizedText( XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT );
- assertNotNull( prop );
- assertEquals( "title", prop.getValue() );
+ prop = xmp.getLocalizedText(XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT);
+ assertNotNull(prop);
+ assertEquals("title", prop.getValue());
// OOXML one is not, the namespace has also not been registiered as the converter has not
// been used
- XMPMetaFactory.getSchemaRegistry().registerNamespace( OfficeOpenXMLCore.NAMESPACE_URI,
- OfficeOpenXMLCore.PREFIX );
- prop = xmp.getProperty( OfficeOpenXMLCore.NAMESPACE_URI, "lastModifiedBy" );
- assertNull( prop );
+ XMPMetaFactory.getSchemaRegistry()
+ .registerNamespace(OfficeOpenXMLCore.NAMESPACE_URI, OfficeOpenXMLCore.PREFIX);
+ prop = xmp.getProperty(OfficeOpenXMLCore.NAMESPACE_URI, "lastModifiedBy");
+ assertNull(prop);
}
@Test
- public void convert_genericMetadataAllQualified_allConverted() throws XMPException,
- TikaException {
+ public void convert_genericMetadataAllQualified_allConverted()
+ throws XMPException, TikaException {
// simple property
- tikaMetadata.set( TikaCoreProperties.FORMAT, GENERIC_MIMETYPE );
+ tikaMetadata.set(TikaCoreProperties.FORMAT, GENERIC_MIMETYPE);
// language alternative
- tikaMetadata.set( TikaCoreProperties.TITLE, "title" );
+ tikaMetadata.set(TikaCoreProperties.TITLE, "title");
// array
- tikaMetadata.set( TikaCoreProperties.SUBJECT, new String[] { "keyword1", "keyword2" } );
+ tikaMetadata.set(TikaCoreProperties.SUBJECT, new String[]{"keyword1", "keyword2"});
- XMPMeta xmp = TikaToXMP.convert( tikaMetadata, null );
+ XMPMeta xmp = TikaToXMP.convert(tikaMetadata, null);
// check simple property
- XMPProperty prop = xmp.getProperty( XMPConst.NS_DC, "format" );
- assertNotNull( prop );
- assertEquals( GENERIC_MIMETYPE, prop.getValue() );
+ XMPProperty prop = xmp.getProperty(XMPConst.NS_DC, "format");
+ assertNotNull(prop);
+ assertEquals(GENERIC_MIMETYPE, prop.getValue());
// check lang alt
- prop = xmp.getLocalizedText( XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT );
- assertNotNull( prop );
- assertEquals( "title", prop.getValue() );
+ prop = xmp.getLocalizedText(XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT);
+ assertNotNull(prop);
+ assertEquals("title", prop.getValue());
// check array
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 1 );
- assertNotNull( prop );
- assertEquals( "keyword1", prop.getValue() );
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 2 );
- assertNotNull( prop );
- assertEquals( "keyword2", prop.getValue() );
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 1);
+ assertNotNull(prop);
+ assertEquals("keyword1", prop.getValue());
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 2);
+ assertNotNull(prop);
+ assertEquals("keyword2", prop.getValue());
}
@Test
public void convert_wrongGenericMetadata_notConverted() throws XMPException, TikaException {
// unknown prefix
- tikaMetadata.set( "unknown:key", "unknownPrefixValue" );
+ tikaMetadata.set("unknown:key", "unknownPrefixValue");
// not qualified key
- tikaMetadata.set( "wrongKey", "wrongKeyValue" );
+ tikaMetadata.set("wrongKey", "wrongKeyValue");
- XMPMeta xmp = TikaToXMP.convert( tikaMetadata, null );
+ XMPMeta xmp = TikaToXMP.convert(tikaMetadata, null);
// XMP is empty
XMPIterator iter = xmp.iterator();
- assertFalse( iter.hasNext() );
+ assertFalse(iter.hasNext());
}
@Test
public void convert_nullInput_throw() throws TikaException {
assertThrows(IllegalArgumentException.class, () -> {
- TikaToXMP.convert( null );
+ TikaToXMP.convert(null);
});
}
@Test
public void isConverterAvailable_availableMime_true() {
- assertTrue( TikaToXMP.isConverterAvailable( OOXML_MIMETYPE ) );
+ assertTrue(TikaToXMP.isConverterAvailable(OOXML_MIMETYPE));
}
@Test
public void isConverterAvailable_noAvailableMime_false() {
- assertFalse( TikaToXMP.isConverterAvailable( GENERIC_MIMETYPE ) );
+ assertFalse(TikaToXMP.isConverterAvailable(GENERIC_MIMETYPE));
}
@Test
public void isConverterAvailable_nullInput_false() {
- assertFalse( TikaToXMP.isConverterAvailable( null ) );
+ assertFalse(TikaToXMP.isConverterAvailable(null));
}
@Test
public void getConverter_ConverterAvailable_class() throws TikaException {
- ITikaToXMPConverter converter = TikaToXMP.getConverter( OOXML_MIMETYPE );
- assertNotNull( converter );
- assertTrue( converter instanceof MSOfficeXMLConverter );
+ ITikaToXMPConverter converter = TikaToXMP.getConverter(OOXML_MIMETYPE);
+ assertNotNull(converter);
+ assertTrue(converter instanceof MSOfficeXMLConverter);
}
@Test
public void getConverter_noConverterAvailable_null() throws TikaException {
- ITikaToXMPConverter converter = TikaToXMP.getConverter( GENERIC_MIMETYPE );
- assertNull( converter );
+ ITikaToXMPConverter converter = TikaToXMP.getConverter(GENERIC_MIMETYPE);
+ assertNull(converter);
}
@Test
diff --git a/tika-xmp/src/test/java/org/apache/tika/xmp/XMPMetadataTest.java b/tika-xmp/src/test/java/org/apache/tika/xmp/XMPMetadataTest.java
index c2c0c1d31..0e4117e3c 100644
--- a/tika-xmp/src/test/java/org/apache/tika/xmp/XMPMetadataTest.java
+++ b/tika-xmp/src/test/java/org/apache/tika/xmp/XMPMetadataTest.java
@@ -26,14 +26,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Date;
import java.util.Properties;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.DublinCore;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Property;
-import org.apache.tika.metadata.PropertyTypeException;
-import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.metadata.XMPRights;
-
import com.adobe.internal.xmp.XMPConst;
import com.adobe.internal.xmp.XMPException;
import com.adobe.internal.xmp.XMPMeta;
@@ -42,40 +34,47 @@ import com.adobe.internal.xmp.properties.XMPProperty;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.DublinCore;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Property;
+import org.apache.tika.metadata.PropertyTypeException;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.metadata.XMPRights;
+
public class XMPMetadataTest {
+ private static final String GENERIC_MIMETYPE = "generic/mimetype";
private Metadata tikaMetadata;
private XMPMetadata xmpMeta;
- private static final String GENERIC_MIMETYPE = "generic/mimetype";
-
// --- SETUP ---
@BeforeEach
public void setUp() throws Exception {
- XMPMetadata.registerNamespace( DublinCore.NAMESPACE_URI_DC_TERMS,
- DublinCore.PREFIX_DC_TERMS );
+ XMPMetadata.registerNamespace(DublinCore.NAMESPACE_URI_DC_TERMS,
+ DublinCore.PREFIX_DC_TERMS);
xmpMeta = new XMPMetadata();
tikaMetadata = new Metadata();
- setupMetadata( tikaMetadata );
+ setupMetadata(tikaMetadata);
}
private void setupMetadata(Metadata metadata) {
// simple property
- metadata.set( TikaCoreProperties.FORMAT, GENERIC_MIMETYPE );
+ metadata.set(TikaCoreProperties.FORMAT, GENERIC_MIMETYPE);
// language alternative
- metadata.set( TikaCoreProperties.TITLE, "title" );
+ metadata.set(TikaCoreProperties.TITLE, "title");
// array
- metadata.set( TikaCoreProperties.SUBJECT, new String[] { "keyword1", "keyword2" } );
+ metadata.set(TikaCoreProperties.SUBJECT, new String[]{"keyword1", "keyword2"});
// date
- metadata.set( TikaCoreProperties.MODIFIED, "2001-01-01T01:01" );
+ metadata.set(TikaCoreProperties.MODIFIED, "2001-01-01T01:01");
// int simple property
- metadata.set( Property.internalInteger( "xmp:Integer" ), "2" );
+ metadata.set(Property.internalInteger("xmp:Integer"), "2");
}
// --- HELPER ---
private void checkArrayValues(String[] values, String baseValue) {
int i = 1;
for (String value : values) {
- assertEquals( baseValue + i, value );
+ assertEquals(baseValue + i, value);
i++;
}
}
@@ -83,60 +82,60 @@ public class XMPMetadataTest {
// --- TESTS ---
@Test
public void process_genericConversion_ok() throws TikaException, XMPException {
- xmpMeta.process( tikaMetadata, GENERIC_MIMETYPE );
+ xmpMeta.process(tikaMetadata, GENERIC_MIMETYPE);
XMPMeta xmp = xmpMeta.getXMPData();
// check simple property
- XMPProperty prop = xmp.getProperty( XMPConst.NS_DC, "format" );
- assertNotNull( prop );
- assertEquals( GENERIC_MIMETYPE, prop.getValue() );
+ XMPProperty prop = xmp.getProperty(XMPConst.NS_DC, "format");
+ assertNotNull(prop);
+ assertEquals(GENERIC_MIMETYPE, prop.getValue());
// check lang alt
- prop = xmp.getLocalizedText( XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT );
- assertNotNull( prop );
- assertEquals( "title", prop.getValue() );
+ prop = xmp.getLocalizedText(XMPConst.NS_DC, "title", null, XMPConst.X_DEFAULT);
+ assertNotNull(prop);
+ assertEquals("title", prop.getValue());
// check array
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 1 );
- assertNotNull( prop );
- assertEquals( "keyword1", prop.getValue() );
- prop = xmp.getArrayItem( XMPConst.NS_DC, "subject", 2 );
- assertNotNull( prop );
- assertEquals( "keyword2", prop.getValue() );
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 1);
+ assertNotNull(prop);
+ assertEquals("keyword1", prop.getValue());
+ prop = xmp.getArrayItem(XMPConst.NS_DC, "subject", 2);
+ assertNotNull(prop);
+ assertEquals("keyword2", prop.getValue());
}
@Test
public void isMultiValued_multiProp_true() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertTrue( xmpMeta.isMultiValued( TikaCoreProperties.SUBJECT) );
+ assertTrue(xmpMeta.isMultiValued(TikaCoreProperties.SUBJECT));
}
@Test
public void isMultiValued_simpleProp_false() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertFalse( xmpMeta.isMultiValued( TikaCoreProperties.FORMAT ) );
+ assertFalse(xmpMeta.isMultiValued(TikaCoreProperties.FORMAT));
}
@Test
public void get_simpleProp_valueReturned() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertEquals( GENERIC_MIMETYPE, xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertEquals(GENERIC_MIMETYPE, xmpMeta.get(TikaCoreProperties.FORMAT));
}
@Test
public void get_arrayProp_firstValueReturned() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertEquals( "keyword1", xmpMeta.get( TikaCoreProperties.SUBJECT) );
+ assertEquals("keyword1", xmpMeta.get(TikaCoreProperties.SUBJECT));
}
@Test
public void get_notExistingProp_null() throws TikaException {
- assertNull( xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertNull(xmpMeta.get(TikaCoreProperties.FORMAT));
}
@Test
@@ -150,7 +149,7 @@ public class XMPMetadataTest {
@Test
public void get_notQualifiedKey_throw() {
assertThrows(PropertyTypeException.class, () -> {
- xmpMeta.get( "wrongKey" );
+ xmpMeta.get("wrongKey");
});
}
@@ -163,50 +162,50 @@ public class XMPMetadataTest {
@Test
public void getInt_IntegerProperty_valueReturned() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertEquals( new Integer( 2 ), xmpMeta.getInt( Property.get( "xmp:Integer" ) ) );
+ assertEquals(new Integer(2), xmpMeta.getInt(Property.get("xmp:Integer")));
}
@Test
public void getDate_DateProperty_valueReturned() throws TikaException, XMPException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- Date date = XMPUtils.convertToDate( "2001-01-01T01:01" ).getCalendar().getTime();
- assertTrue( date.equals( xmpMeta.getDate( TikaCoreProperties.MODIFIED ) ) );
+ Date date = XMPUtils.convertToDate("2001-01-01T01:01").getCalendar().getTime();
+ assertTrue(date.equals(xmpMeta.getDate(TikaCoreProperties.MODIFIED)));
}
@Test
public void getValues_arrayProperty_allElementsReturned() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- String[] values = xmpMeta.getValues( TikaCoreProperties.SUBJECT);
- assertEquals( 2, values.length );
+ String[] values = xmpMeta.getValues(TikaCoreProperties.SUBJECT);
+ assertEquals(2, values.length);
- checkArrayValues( values, "keyword" );
+ checkArrayValues(values, "keyword");
}
@Test
public void testSetAll() {
Properties props = new Properties();
- props.put( TikaCoreProperties.FORMAT.getName(), "format" );
- props.put( TikaCoreProperties.SUBJECT.getName(), "keyword" );
+ props.put(TikaCoreProperties.FORMAT.getName(), "format");
+ props.put(TikaCoreProperties.SUBJECT.getName(), "keyword");
- xmpMeta.setAll( props );
+ xmpMeta.setAll(props);
- assertEquals( "format", xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertEquals("format", xmpMeta.get(TikaCoreProperties.FORMAT));
- String[] values = xmpMeta.getValues( TikaCoreProperties.SUBJECT);
- assertEquals( 1, values.length );
+ String[] values = xmpMeta.getValues(TikaCoreProperties.SUBJECT);
+ assertEquals(1, values.length);
- assertEquals( "keyword", values[0] );
+ assertEquals("keyword", values[0]);
}
@Test
public void set_simpleProp_ok() {
- xmpMeta.set( TikaCoreProperties.FORMAT, GENERIC_MIMETYPE );
+ xmpMeta.set(TikaCoreProperties.FORMAT, GENERIC_MIMETYPE);
- assertEquals( GENERIC_MIMETYPE, xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertEquals(GENERIC_MIMETYPE, xmpMeta.get(TikaCoreProperties.FORMAT));
}
@Test
@@ -233,12 +232,12 @@ public class XMPMetadataTest {
@Test
public void set_arrayProperty_ok() {
- xmpMeta.set( TikaCoreProperties.SUBJECT, new String[] { "keyword1", "keyword2" } );
+ xmpMeta.set(TikaCoreProperties.SUBJECT, new String[]{"keyword1", "keyword2"});
- String[] values = xmpMeta.getValues( TikaCoreProperties.SUBJECT);
- assertEquals( 2, values.length );
+ String[] values = xmpMeta.getValues(TikaCoreProperties.SUBJECT);
+ assertEquals(2, values.length);
- checkArrayValues( values, "keyword" );
+ checkArrayValues(values, "keyword");
}
@Test
@@ -250,24 +249,24 @@ public class XMPMetadataTest {
@Test
public void remove_existingProperty_propertyRemoved() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertNotNull( xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertNotNull(xmpMeta.get(TikaCoreProperties.FORMAT));
- xmpMeta.remove( TikaCoreProperties.FORMAT );
+ xmpMeta.remove(TikaCoreProperties.FORMAT);
- assertNull( xmpMeta.get( TikaCoreProperties.FORMAT ) );
+ assertNull(xmpMeta.get(TikaCoreProperties.FORMAT));
}
@Test
public void size_numberOfNamespacesReturned() throws TikaException {
- xmpMeta.process( tikaMetadata );
+ xmpMeta.process(tikaMetadata);
- assertEquals( 3, xmpMeta.size() );
+ assertEquals(3, xmpMeta.size());
- xmpMeta.set( XMPRights.OWNER, "owner" );
+ xmpMeta.set(XMPRights.OWNER, "owner");
- assertEquals( 4, xmpMeta.size() );
+ assertEquals(4, xmpMeta.size());
}
}