diff --git a/README.md b/README.md index 1e22423ce..4ffef04bd 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,15 @@ Start with having a look at the **[Documentation]** and the **[Javadoc]**. Instructions on how to use Smack in your Java or Android project are provided in the [Smack Readme and Upgrade Guide](https://igniterealtime.org/projects/smack/readme). +License +------- + +Most of Smack is governed by the Apache License 2.0 (SPDX License Identifier: Apache 2.0). This license requires that the contents of a NOICE text file are shown "…within a display generated by the Derivative Works, if and wherever such third-party notices normally appear.". + +Smack comes which such a NOTICE file. Moreover, since `smack-core` is licensed under the Apache License 2.0, the conditions apply to every project using Smack. The content of Smack's NOTICE file can conveniently be retrieved using `Smack.getNoticeStream()`. + +Some subprojects of Smack are governed by other licenses. Please refer to the individual subprojects. + Professional Services --------------------- diff --git a/smack-core/build.gradle b/smack-core/build.gradle index 9a8bd757d..b0cd79641 100644 --- a/smack-core/build.gradle +++ b/smack-core/build.gradle @@ -33,6 +33,7 @@ dependencies { testFixturesApi "org.assertj:assertj-core:3.11.1" testFixturesApi "org.xmlunit:xmlunit-assertj:$xmlUnitVersion" testFixturesApi 'org.hamcrest:hamcrest-library:2.2' + testFixturesApi 'com.google.guava:guava:28.2-jre' } class CreateFileTask extends DefaultTask { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/Smack.java b/smack-core/src/main/java/org/jivesoftware/smack/Smack.java index f59ea632f..690b9bb2d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/Smack.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/Smack.java @@ -16,12 +16,17 @@ */ package org.jivesoftware.smack; +import java.io.InputStream; import java.util.logging.Logger; public class Smack { private static final Logger LOGGER = Logger.getLogger(Smack.class.getName()); + private static final String SMACK_ORG = "org.jivesoftware"; + + public static final String SMACK_PACKAGE = SMACK_ORG + ".smack"; + /** * Returns the Smack version information, eg "1.3.0". * @@ -31,6 +36,12 @@ public class Smack { return SmackInitialization.SMACK_VERSION; } + private static final String NOTICE_RESOURCE = SMACK_PACKAGE + "/NOTICE"; + + public static InputStream getNoticeStream() { + return ClassLoader.getSystemResourceAsStream(NOTICE_RESOURCE); + } + public static void ensureInitialized() { if (SmackConfiguration.isSmackInitialized()) { return; diff --git a/smack-core/src/test/java/org/jivesoftware/smack/SmackTest.java b/smack-core/src/test/java/org/jivesoftware/smack/SmackTest.java new file mode 100644 index 000000000..7dd49cc39 --- /dev/null +++ b/smack-core/src/test/java/org/jivesoftware/smack/SmackTest.java @@ -0,0 +1,57 @@ +/** + * + * Copyright 2020 Florian Schmaus + * + * Licensed 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 + * + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smack; + +import static org.junit.Assert.assertTrue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Set; + +import com.google.common.collect.Sets; +import org.junit.jupiter.api.Test; + +public class SmackTest { + + @Test + public void getNoticeStreamTest() throws IOException { + Set expectedStrings = Sets.newHashSet( + "Florian Schmaus" + , "Paul Schaub" + ); + int maxLineLength = 0; + + try (InputStream inputStream = Smack.getNoticeStream()) { + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + + while (reader.ready()) { + String line = reader.readLine(); + + int lineLength = line.length(); + maxLineLength = Math.max(maxLineLength, lineLength); + + expectedStrings.removeIf(s -> s.equals(line)); + } + } + + assertTrue(expectedStrings.isEmpty()); + assertTrue(maxLineLength < 60); + } +} diff --git a/smack-java8-full/build.gradle b/smack-java8-full/build.gradle index 5292c5cff..47253d4e6 100644 --- a/smack-java8-full/build.gradle +++ b/smack-java8-full/build.gradle @@ -14,7 +14,7 @@ dependencies { api project(':smack-resolver-minidns-dox') api project(':smack-tcp') - testImplementation 'com.google.guava:guava:28.2-jre' + testImplementation(testFixtures(project(":smack-core"))) testImplementation 'org.jgrapht:jgrapht-io:1.3.1' }