From 59dfa1fc884fb7640de749a5e70e83138c0074f5 Mon Sep 17 00:00:00 2001 From: Tristan Date: Thu, 9 Jan 2025 12:22:49 +0100 Subject: [PATCH] removes unused code --- src/main/java/org/jxmpp/jid/BareJid.java | 34 - .../java/org/jxmpp/jid/DomainBareJid.java | 33 - .../java/org/jxmpp/jid/DomainFullJid.java | 34 - src/main/java/org/jxmpp/jid/DomainJid.java | 34 - .../java/org/jxmpp/jid/EntityBareJid.java | 34 - .../java/org/jxmpp/jid/EntityFullJid.java | 34 - src/main/java/org/jxmpp/jid/EntityJid.java | 56 - src/main/java/org/jxmpp/jid/FullJid.java | 42 - src/main/java/org/jxmpp/jid/Jid.java | 489 ----- .../java/org/jxmpp/jid/impl/AbstractJid.java | 282 --- .../jid/impl/DomainAndResourcepartJid.java | 173 -- .../org/jxmpp/jid/impl/DomainpartJid.java | 162 -- .../java/org/jxmpp/jid/impl/JidCreate.java | 1684 ----------------- .../jxmpp/jid/impl/LocalAndDomainpartJid.java | 182 -- .../impl/LocalDomainAndResourcepartJid.java | 185 -- .../java/org/jxmpp/jid/impl/package-info.java | 21 - src/main/java/org/jxmpp/jid/package-info.java | 21 - .../java/org/jxmpp/jid/parts/Domainpart.java | 108 -- .../java/org/jxmpp/jid/parts/Localpart.java | 183 -- src/main/java/org/jxmpp/jid/parts/Part.java | 102 - .../org/jxmpp/jid/parts/Resourcepart.java | 119 -- .../org/jxmpp/jid/parts/package-info.java | 21 - src/main/java/org/jxmpp/jid/util/JidUtil.java | 424 ----- .../java/org/jxmpp/jid/util/package-info.java | 21 - 24 files changed, 4478 deletions(-) delete mode 100644 src/main/java/org/jxmpp/jid/BareJid.java delete mode 100644 src/main/java/org/jxmpp/jid/DomainBareJid.java delete mode 100644 src/main/java/org/jxmpp/jid/DomainFullJid.java delete mode 100644 src/main/java/org/jxmpp/jid/DomainJid.java delete mode 100644 src/main/java/org/jxmpp/jid/EntityBareJid.java delete mode 100644 src/main/java/org/jxmpp/jid/EntityFullJid.java delete mode 100644 src/main/java/org/jxmpp/jid/EntityJid.java delete mode 100644 src/main/java/org/jxmpp/jid/FullJid.java delete mode 100644 src/main/java/org/jxmpp/jid/Jid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/AbstractJid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/DomainAndResourcepartJid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/DomainpartJid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/JidCreate.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/LocalAndDomainpartJid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java delete mode 100644 src/main/java/org/jxmpp/jid/impl/package-info.java delete mode 100644 src/main/java/org/jxmpp/jid/package-info.java delete mode 100644 src/main/java/org/jxmpp/jid/parts/Domainpart.java delete mode 100644 src/main/java/org/jxmpp/jid/parts/Localpart.java delete mode 100644 src/main/java/org/jxmpp/jid/parts/Part.java delete mode 100644 src/main/java/org/jxmpp/jid/parts/Resourcepart.java delete mode 100644 src/main/java/org/jxmpp/jid/parts/package-info.java delete mode 100644 src/main/java/org/jxmpp/jid/util/JidUtil.java delete mode 100644 src/main/java/org/jxmpp/jid/util/package-info.java diff --git a/src/main/java/org/jxmpp/jid/BareJid.java b/src/main/java/org/jxmpp/jid/BareJid.java deleted file mode 100644 index 175dbf0..0000000 --- a/src/main/java/org/jxmpp/jid/BareJid.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * Copyright © 2015-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) which has no {@link org.jxmpp.jid.parts.Resourcepart}. Either - * {@link EntityBareJid} or {@link DomainBareJid}. - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface BareJid extends Jid { - -} diff --git a/src/main/java/org/jxmpp/jid/DomainBareJid.java b/src/main/java/org/jxmpp/jid/DomainBareJid.java deleted file mode 100644 index 7ac39f2..0000000 --- a/src/main/java/org/jxmpp/jid/DomainBareJid.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * - * Copyright © 2014-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) consisting of the domainpart. For example "xmpp.org". - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface DomainBareJid extends Jid, BareJid, DomainJid { - -} diff --git a/src/main/java/org/jxmpp/jid/DomainFullJid.java b/src/main/java/org/jxmpp/jid/DomainFullJid.java deleted file mode 100644 index 79591f7..0000000 --- a/src/main/java/org/jxmpp/jid/DomainFullJid.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * Copyright © 2014-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) consisting of a domainpart and a resourcepart. For example - * "xmpp.org/resource". - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface DomainFullJid extends Jid, FullJid, DomainJid { - -} diff --git a/src/main/java/org/jxmpp/jid/DomainJid.java b/src/main/java/org/jxmpp/jid/DomainJid.java deleted file mode 100644 index f2f3487..0000000 --- a/src/main/java/org/jxmpp/jid/DomainJid.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * Copyright © 2015-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) which has no {@link org.jxmpp.jid.parts.Localpart}. Either - * {@link DomainBareJid} or {@link DomainFullJid}. - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface DomainJid extends Jid { - -} diff --git a/src/main/java/org/jxmpp/jid/EntityBareJid.java b/src/main/java/org/jxmpp/jid/EntityBareJid.java deleted file mode 100644 index 90e3dae..0000000 --- a/src/main/java/org/jxmpp/jid/EntityBareJid.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * Copyright © 2014-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) consisting of a localpart and a domainpart. For example - * "user@xmpp.org". - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface EntityBareJid extends Jid, EntityJid, BareJid { - -} diff --git a/src/main/java/org/jxmpp/jid/EntityFullJid.java b/src/main/java/org/jxmpp/jid/EntityFullJid.java deleted file mode 100644 index e6beef4..0000000 --- a/src/main/java/org/jxmpp/jid/EntityFullJid.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * Copyright © 2014-2016 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.jxmpp.jid; - -/** - * An XMPP address (JID) consisting of a localpart, domainpart and resourcepart. For example - * "user@xmpp.org/resource". - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface EntityFullJid extends Jid, FullJid, EntityJid { - -} diff --git a/src/main/java/org/jxmpp/jid/EntityJid.java b/src/main/java/org/jxmpp/jid/EntityJid.java deleted file mode 100644 index ea9c2e9..0000000 --- a/src/main/java/org/jxmpp/jid/EntityJid.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * - * Copyright © 2014-2018 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.jxmpp.jid; - -import org.jxmpp.jid.parts.Localpart; - -/** - * An XMPP address (JID) which has a {@link Localpart}. Either {@link EntityBareJid} or {@link EntityFullJid}. - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface EntityJid extends Jid { - - /** - * Return the {@link Localpart} of this JID. - * - * @return the localpart. - */ - Localpart getLocalpart(); - - /** - * Return the bare JID of this entity JID. - * - * @return the bare JID. - */ - EntityBareJid asEntityBareJid(); - - /** - * Return the bare JID string of this full JID. - * - * @return the bare JID string. - */ - String asEntityBareJidString(); - -} diff --git a/src/main/java/org/jxmpp/jid/FullJid.java b/src/main/java/org/jxmpp/jid/FullJid.java deleted file mode 100644 index bcdfb4c..0000000 --- a/src/main/java/org/jxmpp/jid/FullJid.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * - * Copyright © 2014-2016 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.jxmpp.jid; - -import org.jxmpp.jid.parts.Resourcepart; - -/** - * An XMPP address (JID) which has a {@link Resourcepart}. Either {@link EntityFullJid} or {@link DomainFullJid}. - *

- * Examples: - *

- * - * - * @see Jid - */ -public interface FullJid extends Jid { - - /** - * Return the {@link Resourcepart} of this JID. - * - * @return the resourcepart. - */ - Resourcepart getResourcepart(); - -} diff --git a/src/main/java/org/jxmpp/jid/Jid.java b/src/main/java/org/jxmpp/jid/Jid.java deleted file mode 100644 index ad8ac1c..0000000 --- a/src/main/java/org/jxmpp/jid/Jid.java +++ /dev/null @@ -1,489 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid; - -import java.io.Serializable; - -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; - -/** - * An XMPP address, also known as JID (formerly for "Jabber Identifier"), which acts as globally unique address - * within the XMPP network. - *

- * JIDs are created from {@link String} or {@link CharSequence} with the {@link org.jxmpp.jid.impl.JidCreate} utility. - *

- * - *
- * Jid jid = JidCreate.from("juliet@capulet.org/balcony");
- * EntityBareJid bareJid = JidCreate.entityBareFrom("romeo@montague.net");
- * 
- *

- * This is the super interface for all JID types, which are constructed from two dimensions: Bare/Full and - * Domain/Entity. Every JID consists at least of a {@link Domainpart}. Bare JID types do not come with a - * {@link Resourcepart}, full JID types always have a {@link Resourcepart}. Domain JID types do not possess a - * {@link Localpart}, whereas entity JID types always do. - *

- *

- * The following table shows a few examples of JID types. - *

- * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
XMPP Address Types
ExampleType
example.org{@link DomainBareJid}
example.org/resource{@link DomainFullJid}
user@example.org{@link EntityBareJid}
user@example.org/resource{@link EntityFullJid}
- *

- * You can retrieve the escaped String representing the Jid with {@link #toString()} or the unescaped String of the JID - * with {@link #asUnescapedString()}. - *

- *

URL Encoded JIDs

- *

- * The URL encoded representation of a JID is ideal if a JID should be stored as part of a path name, e.g. as file name. - * You can retrieve this information using {@link #asUrlEncodedString()}. The JidCreate API provides methods to create - * JIDs from URL encoded Strings like {@link org.jxmpp.jid.impl.JidCreate#fromUrlEncoded(CharSequence)}. - *

- * - * - * @see RFC 6120 (XMPP: Core) § 2.1 Global Addresses - * @see RFC 6122 (XMPP: Address Format) § 2.1 - * Fundamentals - */ -public interface Jid extends Comparable, CharSequence, Serializable { - - /** - * Get the {@link Domainpart} of this Jid. - * - * @return the domainpart. - */ - Domainpart getDomain(); - - /** - * Returns the String representation of this JID. - * - * @return the String representation of this JID. - */ - @Override - String toString(); - - /** - * Return the unescaped String representation of this JID. - *

- * Since certain Unicode code points are disallowed in the localpart of a JID by the required stringprep profile, - * those need to get escaped when used in a real JID. The unescaped representation of the JID is only for - * presentation to a human user or for gatewaying to a non-XMPP system. - *

- * For example, if the users inputs {@code 'at&t guy@example.com'}, the escaped real JID created with - * {@link org.jxmpp.jid.impl.JidCreate} will be {@code 'at\26t\20guy@example.com'}, which is what - * {@link Jid#toString()} will return. But {@link Jid#asUnescapedString()} will return again - * {@code 'at&t guy@example.com'}. - * - * @return the unescaped String representation of this JID. - */ - String asUnescapedString(); - - /** - * Get the URL encoded version of this JID. - * - * @return the URL encoded version of this JID. - * @since 0.7.0 - */ - String asUrlEncodedString(); - - /** - * Check if this is a {@link EntityBareJid} or {@link EntityFullJid}. - * - * @return true if this is an instance of BareJid or FullJid. - */ - boolean isEntityJid(); - - /** - * Check if this is an instance of {@link EntityBareJid}. - * - * @return true if this is an instance of EntityBareJid - */ - boolean isEntityBareJid(); - - /** - * Check if this is an instance of {@link EntityFullJid}. - * - * @return true if this is an instance of EntityFullJid - */ - boolean isEntityFullJid(); - - /** - * Check if this is an instance of {@link DomainBareJid}. - * - * @return true if this is an instance of DomainBareJid - */ - boolean isDomainBareJid(); - - /** - * Check if this is an instance of {@link DomainFullJid}. - * - * @return true if this is an instance of DomainFullJid - */ - boolean isDomainFullJid(); - - /** - * Check if this is an instance of {@link EntityBareJid} or {@link DomainBareJid}. - * - * @return true if this is an instance of BareJid or DomainBareJid - */ - boolean hasNoResource(); - - /** - * Check if this is a Jid with a {@link Resourcepart}. - * - * @return true if this Jid has a resourcepart. - */ - boolean hasResource(); - - /** - * Check if this is a Jid with a {@link Localpart}. - * - * @return true if this Jid has a localpart. - */ - boolean hasLocalpart(); - - /** - * Return a JID created by removing the Resourcepart from this JID. - * - * @return this Jid without a Resourcepart. - */ - BareJid asBareJid(); - - /** - * Convert this Jid to a {@link EntityBareJid} if possible. - * - * @return the corresponding {@link EntityBareJid} or null. - */ - EntityBareJid asEntityBareJidIfPossible(); - - /** - * Convert this Jid to a {@link EntityBareJid} or throw an {@code IllegalStateException} if this is not possible. - * - * @return the corresponding {@link EntityBareJid}. - */ - EntityBareJid asEntityBareJidOrThrow(); - - /** - * Convert this Jid to a {@link EntityFullJid} if possible. - * - * @return the corresponding {@link EntityFullJid} or null. - */ - EntityFullJid asEntityFullJidIfPossible(); - - /** - * Convert this Jid to a {@link EntityFullJid} or throw an {@code IllegalStateException} if this is not possible. - * - * @return the corresponding {@link EntityFullJid}. - */ - EntityFullJid asEntityFullJidOrThrow(); - - /** - * Convert this Jid to a {@link EntityJid} if possible. - * - * @return the corresponding {@link EntityJid} or null. - */ - EntityJid asEntityJidIfPossible(); - - /** - * Convert this Jid to a {@link EntityJid} or throw an {@code IllegalStateException} if this is not possible. - * - * @return the corresponding {@link EntityJid}. - */ - EntityJid asEntityJidOrThrow(); - - /** - * Convert this Jid to a {@link FullJid} if possible. - * - * @return the corresponding {@link FullJid} or null. - */ - FullJid asFullJidIfPossible(); - - /** - * Convert this Jid to a {@link FullJid} or throw an {@code IllegalStateException} if this is not possible. - * - * @return the corresponding {@link FullJid}. - */ - EntityFullJid asFullJidOrThrow(); - - /** - * Convert this Jid to a {@link DomainBareJid}. - *

- * Note that it is always possible to convert a Jid to a DomainBareJid, since every Jid has a domain part. - *

- * - * @return the corresponding DomainBareJid. - */ - DomainBareJid asDomainBareJid(); - - /** - * Convert this Jid to a {@link DomainFullJid} if possible. - * - * @return the corresponding DomainFullJid or null. - */ - DomainFullJid asDomainFullJidIfPossible(); - - /** - * Convert this Jid to a {@link DomainFullJid} or throw an {@code IllegalStateException} if this is not possible. - * - * @return the corresponding {@link DomainFullJid}. - */ - DomainFullJid asDomainFullJidOrThrow(); - - /** - * Get the resourcepart of this JID or null. - *

- * If the JID is of form {@code } then this method returns 'resource'. If the JID no - * resourcepart, then null is returned. - *

- * - * @return the resource of this JID or null. - */ - Resourcepart getResourceOrNull(); - - /** - * Get the resourcepart of this JID or return the empty resourcepart. - *

- * If the JID is of form {@code } then this method returns 'resource'. If the JID no - * resourcepart, then {@link org.jxmpp.jid.parts.Resourcepart#EMPTY} is returned. - *

- * - * @return the resource of this JID or the empty resourcepart. - */ - Resourcepart getResourceOrEmpty(); - - /** - * Get the resourcepart of this JID or throw an {@code IllegalStateException}. - *

- * If the JID is of form {@code } then this method returns 'resource'. If the JID no - * resourcepart, then an {@code IllegalStateException} is thrown. - *

- * - * @return the resource of this JID. - */ - Resourcepart getResourceOrThrow(); - - /** - * Get the localpart of this JID or null. - *

- * If the JID is of form {@code } then this method returns 'localpart'. If the JID has no - * localpart, then null is returned. - *

- * - * @return the localpart of this JID or null. - */ - Localpart getLocalpartOrNull(); - - /** - * Get the localpart of this JID or throw an {@code IllegalStateException}. - *

- * If the JID is of form {@code } then this method returns 'localpart'. If the JID has no - * localpart, then null is returned. - *

- * - * @return the localpart of this JID. - */ - Localpart getLocalpartOrThrow(); - - /** - * Check if this JID is the parent of another JID. The parent of relation is defined, under the - * precondition that the JID parts (localpart, domainpart and resourcepart) are equal, as follows: - *
-	 * | this JID (parentOf) | other JID           | result |
-	 * |---------------------+---------------------+--------|
-	 * | dom.example         | dom.example         | true   |
-	 * | dom.example         | dom.example/res     | true   |
-	 * | dom.example         | loc@dom.example     | true   |
-	 * | dom.example         | loc@dom.example/res | true   |
-	 * | dom.example/res     | dom.exmple          | false  |
-	 * | dom.example/res     | dom.example/res     | true   |
-	 * | dom.example/res     | loc@dom.example     | false  |
-	 * | dom.example/res     | loc@dom.example/res | false  |
-	 * | loc@dom.example     | dom.example         | false  |
-	 * | loc@dom.example     | dom.example/res     | false  |
-	 * | loc@dom.example     | loc@dom.example     | true   |
-	 * | loc@dom.example     | loc@dom.example/res | true   |
-	 * | loc@dom.example/res | dom.example         | false  |
-	 * | loc@dom.example/res | dom.example/res     | false  |
-	 * | loc@dom.example/res | loc@dom.example     | false  |
-	 * | loc@dom.example/res | loc@dom.example/res | true   |
-	 * 
- * - * @param jid - * the other JID to compare with - * @return true if this JID is a parent of the given JID. - */ - boolean isParentOf(Jid jid); - - /** - * See {@link #isParentOf(Jid)}. - * - * @param bareJid the bare JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isParentOf(EntityBareJid bareJid); - - /** - * See {@link #isParentOf(Jid)}. - * - * @param fullJid the full JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isParentOf(EntityFullJid fullJid); - - /** - * See {@link #isParentOf(Jid)}. - * - * @param domainBareJid the domain bare JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isParentOf(DomainBareJid domainBareJid); - - /** - * See {@link #isParentOf(Jid)}. - * - * @param domainFullJid the domain full JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isParentOf(DomainFullJid domainFullJid); - - /** - * Check if this JID is the strict parent of another JID. In other words, all parts of this JID must - * exist on the other JID, and match this JID's values. Furthermore, and this is what makes this - * method different from {@link #isParentOf(Jid)}, the other JID must have one additional part, - * that this JID does not have. The parent of relation is defined, under the - * precondition that the JID parts (localpart, domainpart and resourcepart) are equal, as follows: - *
-	 * | this JID            | other JID           | result |
-	 * |---------------------+---------------------+--------|
-	 * | dom.example         | dom.example         | false  | (different from isParentOf)
-	 * | dom.example         | dom.example/res     | true   |
-	 * | dom.example         | loc@dom.example     | true   |
-	 * | dom.example         | loc@dom.example/res | true   |
-	 * | dom.example/res     | dom.exmple          | false  |
-	 * | dom.example/res     | dom.example/res     | false  | (different from isParentOf)
-	 * | dom.example/res     | loc@dom.example     | false  |
-	 * | dom.example/res     | loc@dom.example/res | false  |
-	 * | loc@dom.example     | dom.example         | false  |
-	 * | loc@dom.example     | dom.example/res     | false  |
-	 * | loc@dom.example     | loc@dom.example     | false  | (different from isParentOf)
-	 * | loc@dom.example     | loc@dom.example/res | true   |
-	 * | loc@dom.example/res | dom.example         | false  |
-	 * | loc@dom.example/res | dom.example/res     | false  |
-	 * | loc@dom.example/res | loc@dom.example     | false  |
-	 * | loc@dom.example/res | loc@dom.example/res | false  | (different from isParentOf)
-	 * 
- * - * @param jid - * the other JID to compare with - * @return true if this JID is a parent of the given JID. - */ - boolean isStrictParentOf(Jid jid); - - /** - * See {@link #isParentOf(Jid)}. - * - * @param bareJid the bare JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isStrictParentOf(EntityBareJid bareJid); - - /** - * See {@link #isStrictParentOf(Jid)}. - * - * @param fullJid the full JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isStrictParentOf(EntityFullJid fullJid); - - /** - * See {@link #isStrictParentOf(Jid)}. - * - * @param domainBareJid the domain bare JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isStrictParentOf(DomainBareJid domainBareJid); - - /** - * See {@link #isStrictParentOf(Jid)}. - * - * @param domainFullJid the domain full JID. - * @return true if this JID is a parent of the given JID. - */ - boolean isStrictParentOf(DomainFullJid domainFullJid); - - /** - * Return the downcasted instance of this Jid. This method is unsafe, make sure to check that this is actually of the type of are casting to. - * - * @param jidClass the class of JID to downcast too. - * @param the Jid type to downcast to. - * @return the downcasted instanced of this - * @throws ClassCastException if this JID is not assignable to the type T. - */ - T downcast(Class jidClass) throws ClassCastException; - - /** - * Compares the given CharSequence with this JID. Returns true if {@code equals(charSequence.toString()} would - * return true. - * - * @param charSequence the CharSequence to compare this JID with. - * @return true if if {@code equals(charSequence.toString()} would return true. - * @see #equals(String) - */ - @SuppressWarnings("NonOverridingEquals") - boolean equals(CharSequence charSequence); - - /** - * Compares the given String wit this JID. - *

- * Returns true if {@code toString().equals(string)}, that is if the String representation of this JID matches the given string. - *

- * - * @param string the String to compare this JID with. - * @return true if {@code toString().equals(string)}. - */ - @SuppressWarnings("NonOverridingEquals") - boolean equals(String string); - - /** - * Returns the canonical String representation of this JID. See {@link String#intern} for details. - * - * @return the canonical String representation. - */ - String intern(); -} diff --git a/src/main/java/org/jxmpp/jid/impl/AbstractJid.java b/src/main/java/org/jxmpp/jid/impl/AbstractJid.java deleted file mode 100644 index 3efdad4..0000000 --- a/src/main/java/org/jxmpp/jid/impl/AbstractJid.java +++ /dev/null @@ -1,282 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.impl; - -import org.jxmpp.jid.EntityBareJid; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; - -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.Jid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; - -public abstract class AbstractJid implements Jid { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Cache for the String representation of this JID. - */ - protected String cache; - - @Override - public final boolean isEntityJid() { - return isEntityBareJid() || isEntityFullJid(); - } - - @Override - public final boolean isEntityBareJid() { - return this instanceof EntityBareJid; - } - - @Override - public final boolean isEntityFullJid() { - return this instanceof EntityFullJid; - } - - @Override - public final boolean isDomainBareJid() { - return this instanceof DomainBareJid; - } - - @Override - public final boolean isDomainFullJid() { - return this instanceof DomainFullJid; - } - - @Override - public abstract boolean hasNoResource(); - - @Override - public final boolean hasResource() { - return this instanceof FullJid; - } - - @Override - public final boolean hasLocalpart() { - return this instanceof EntityJid; - } - - @Override - public final T downcast(Class jidClass) { - return jidClass.cast(this); - } - - @Override - public int length() { - return toString().length(); - } - - @Override - public char charAt(int index) { - return toString().charAt(index); - } - - @Override - public CharSequence subSequence(int start, int end) { - return toString().subSequence(start, end); - } - - @Override - public final EntityBareJid asEntityBareJidOrThrow() { - EntityBareJid entityBareJid = asEntityBareJidIfPossible(); - if (entityBareJid == null) throwIse("can not be converted to EntityBareJid"); - return entityBareJid; - } - - @Override - public EntityFullJid asEntityFullJidOrThrow() { - EntityFullJid entityFullJid = asEntityFullJidIfPossible(); - if (entityFullJid == null) throwIse("can not be converted to EntityFullJid"); - return entityFullJid; - } - - @Override - public EntityJid asEntityJidOrThrow() { - EntityJid entityJid = asEntityJidIfPossible(); - if (entityJid == null) throwIse("can not be converted to EntityJid"); - return entityJid; - } - - @Override - public EntityFullJid asFullJidOrThrow() { - EntityFullJid entityFullJid = asEntityFullJidIfPossible(); - if (entityFullJid == null) throwIse("can not be converted to EntityBareJid"); - return entityFullJid; - } - - @Override - public DomainFullJid asDomainFullJidOrThrow() { - DomainFullJid domainFullJid = asDomainFullJidIfPossible(); - if (domainFullJid == null) throwIse("can not be converted to DomainFullJid"); - return domainFullJid; - } - - @Override - public abstract Resourcepart getResourceOrNull(); - - @Override - public final Resourcepart getResourceOrEmpty() { - Resourcepart resourcepart = getResourceOrNull(); - if (resourcepart == null) return Resourcepart.EMPTY; - return resourcepart; - } - - @Override - public final Resourcepart getResourceOrThrow() { - Resourcepart resourcepart = getResourceOrNull(); - if (resourcepart == null) throwIse("has no resourcepart"); - return resourcepart; - } - - @Override - public abstract Localpart getLocalpartOrNull(); - - @Override - public final Localpart getLocalpartOrThrow() { - Localpart localpart = getLocalpartOrNull(); - if (localpart == null) throwIse("has no localpart"); - return localpart; - } - - @Override - public final boolean isParentOf(Jid jid) { - EntityFullJid fullJid = jid.asEntityFullJidIfPossible(); - if (fullJid != null) { - return isParentOf(fullJid); - } - EntityBareJid bareJid = jid.asEntityBareJidIfPossible(); - if (bareJid != null) { - return isParentOf(bareJid); - } - DomainFullJid domainFullJid = jid.asDomainFullJidIfPossible(); - if (domainFullJid != null) { - return isParentOf(domainFullJid); - } - - return isParentOf(jid.asDomainBareJid()); - } - - @Override - public final boolean isStrictParentOf(Jid jid) { - EntityFullJid fullJid = jid.asEntityFullJidIfPossible(); - if (fullJid != null) { - return isStrictParentOf(fullJid); - } - EntityBareJid bareJid = jid.asEntityBareJidIfPossible(); - if (bareJid != null) { - return isStrictParentOf(bareJid); - } - DomainFullJid domainFullJid = jid.asDomainFullJidIfPossible(); - if (domainFullJid != null) { - return isStrictParentOf(domainFullJid); - } - - return isStrictParentOf(jid.asDomainBareJid()); - } - - @Override - public final int hashCode() { - return toString().hashCode(); - } - - @Override - public final boolean equals(Object other) { - if (other == null) { - return false; - } - if (this == other) { - return true; - } - if (other instanceof CharSequence) { - return equals((CharSequence) other); - } - return false; - } - - @SuppressWarnings("NonOverridingEquals") - @Override - public final boolean equals(CharSequence charSequence) { - if (charSequence == null) { - return false; - } - return equals(charSequence.toString()); - } - - @SuppressWarnings("NonOverridingEquals") - @Override - public final boolean equals(String string) { - return toString().equals(string); - } - - @Override - public final int compareTo(Jid other) { - String otherString = other.toString(); - String myString = toString(); - return myString.compareTo(otherString); - } - - /** - * The cache holding the internalized value of this part. This needs to be transient so that the - * cache is recreated once the data was de-serialized. - */ - private transient String internalizedCache; - - @Override - public final String intern() { - if (internalizedCache == null) { - cache = internalizedCache = toString().intern(); - } - return internalizedCache; - } - - private transient String urlEncodedCache; - - @Override - public final String asUrlEncodedString() { - if (urlEncodedCache == null) { - String string = toString(); - try { - urlEncodedCache = URLEncoder.encode(string, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } - } - return urlEncodedCache; - } - - private void throwIse(String message) { - String exceptionMessage = "The JID '" + this + "' " + message; - throw new IllegalStateException(exceptionMessage); - } - - static O requireNonNull(O object, String message) { - if (object != null) { - return object; - } - throw new IllegalArgumentException(message); - } -} diff --git a/src/main/java/org/jxmpp/jid/impl/DomainAndResourcepartJid.java b/src/main/java/org/jxmpp/jid/impl/DomainAndResourcepartJid.java deleted file mode 100644 index 6f95edf..0000000 --- a/src/main/java/org/jxmpp/jid/impl/DomainAndResourcepartJid.java +++ /dev/null @@ -1,173 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.impl; - -import org.jxmpp.JxmppContext; -import org.jxmpp.jid.BareJid; -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; -import org.jxmpp.stringprep.XmppStringprepException; - -/** - * RFC6122 2.4 allows JIDs with only a domain and resource part. - *

- * Note that this implementation does not require an cache for the unescaped - * string, compared to {@link LocalDomainAndResourcepartJid}. - *

- * - */ -public final class DomainAndResourcepartJid extends AbstractJid implements DomainFullJid { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private final DomainBareJid domainBareJid; - private final Resourcepart resource; - - DomainAndResourcepartJid(String domain, String resource, JxmppContext context) throws XmppStringprepException { - this(new DomainpartJid(domain, context), Resourcepart.from(resource, context)); - } - - DomainAndResourcepartJid(DomainBareJid domainBareJid, Resourcepart resource) { - this.domainBareJid = requireNonNull(domainBareJid, "The DomainBareJid must not be null"); - this.resource = requireNonNull(resource, "The Resource must not be null"); - } - - @Override - public String toString() { - if (cache != null) { - return cache; - } - cache = domainBareJid.toString() + '/' + resource; - return cache; - } - - @Override - public DomainBareJid asDomainBareJid() { - return domainBareJid; - } - - @Override - public boolean hasNoResource() { - return false; - } - - @Override - public EntityBareJid asEntityBareJidIfPossible() { - return null; - } - - @Override - public EntityFullJid asEntityFullJidIfPossible() { - return null; - } - - @Override - public DomainFullJid asDomainFullJidIfPossible() { - return this; - } - - @Override - public Resourcepart getResourceOrNull() { - return getResourcepart(); - } - - @Override - public boolean isParentOf(EntityBareJid bareJid) { - return false; - } - - @Override - public boolean isParentOf(EntityFullJid fullJid) { - return false; - } - - @Override - public boolean isParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isParentOf(DomainFullJid domainFullJid) { - return domainBareJid.equals(domainFullJid.getDomain()) && resource.equals(domainFullJid.getResourcepart()); - } - - @Override - public boolean isStrictParentOf(EntityBareJid bareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(EntityFullJid fullJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainFullJid domainFullJid) { - // A DomainFullJid can never be the strict parent of another DomainFullJid. - return false; - } - - @Override - public Resourcepart getResourcepart() { - return resource; - } - - @Override - public BareJid asBareJid() { - return asDomainBareJid(); - } - - @Override - public Domainpart getDomain() { - return domainBareJid.getDomain(); - } - - @Override - public String asUnescapedString() { - return toString(); - } - - @Override - public EntityJid asEntityJidIfPossible() { - return null; - } - - @Override - public FullJid asFullJidIfPossible() { - return this; - } - - @Override - public Localpart getLocalpartOrNull() { - return null; - } -} diff --git a/src/main/java/org/jxmpp/jid/impl/DomainpartJid.java b/src/main/java/org/jxmpp/jid/impl/DomainpartJid.java deleted file mode 100644 index 716a1df..0000000 --- a/src/main/java/org/jxmpp/jid/impl/DomainpartJid.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.impl; - -import org.jxmpp.JxmppContext; -import org.jxmpp.jid.BareJid; -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; -import org.jxmpp.stringprep.XmppStringprepException; - -public final class DomainpartJid extends AbstractJid implements DomainBareJid { - - /** - * - */ - private static final long serialVersionUID = 1L; - - final Domainpart domain; - - DomainpartJid(String domain, JxmppContext context) throws XmppStringprepException { - this(Domainpart.from(domain, context)); - } - - DomainpartJid(Domainpart domain) { - this.domain = requireNonNull(domain, "The Domainpart must not be null"); - } - - @Override - public Domainpart getDomain() { - return domain; - } - - @Override - public String toString() { - // Prefer the cached version over the domain.toString() one, since the cached version may - // also be the internalized representation of the String. Which, e.g. provides benefits when - // comparing JIDs. - if (cache != null) { - return cache; - } - cache = domain.toString(); - return cache; - } - - @Override - public String asUnescapedString() { - // No un-escaping necessary for DomainpartJid - return toString(); - } - - @Override - public DomainBareJid asDomainBareJid() { - return this; - } - - @Override - public boolean hasNoResource() { - return true; - } - - @Override - public EntityBareJid asEntityBareJidIfPossible() { - return null; - } - - @Override - public EntityFullJid asEntityFullJidIfPossible() { - return null; - } - - @Override - public DomainFullJid asDomainFullJidIfPossible() { - return null; - } - - @Override - public boolean isParentOf(EntityBareJid bareJid) { - return domain.equals(bareJid.getDomain()); - } - - @Override - public boolean isParentOf(EntityFullJid fullJid) { - return domain.equals(fullJid.getDomain()); - } - - @Override - public boolean isParentOf(DomainBareJid domainBareJid) { - return domain.equals(domainBareJid.getDomain()); - } - - @Override - public boolean isParentOf(DomainFullJid domainFullJid) { - return domain.equals(domainFullJid.getDomain()); - } - - @Override - public boolean isStrictParentOf(EntityBareJid bareJid) { - return isParentOf(bareJid); - } - - @Override - public boolean isStrictParentOf(EntityFullJid fullJid) { - return isParentOf(fullJid); - } - - @Override - public boolean isStrictParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainFullJid domainFullJid) { - return isParentOf(domainFullJid); - } - - @Override - public BareJid asBareJid() { - return this; - } - - @Override - public EntityJid asEntityJidIfPossible() { - return null; - } - - @Override - public FullJid asFullJidIfPossible() { - return null; - } - - @Override - public Resourcepart getResourceOrNull() { - return null; - } - - @Override - public Localpart getLocalpartOrNull() { - return null; - } - -} diff --git a/src/main/java/org/jxmpp/jid/impl/JidCreate.java b/src/main/java/org/jxmpp/jid/impl/JidCreate.java deleted file mode 100644 index be5f60c..0000000 --- a/src/main/java/org/jxmpp/jid/impl/JidCreate.java +++ /dev/null @@ -1,1684 +0,0 @@ -/** - * - * Copyright © 2014-2022 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.jxmpp.jid.impl; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; - -import org.jxmpp.JxmppContext; -import org.jxmpp.jid.BareJid; -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.Jid; -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; -import org.jxmpp.stringprep.XmppStringprep; -import org.jxmpp.stringprep.XmppStringprepException; -import org.jxmpp.util.cache.Cache; -import org.jxmpp.util.cache.LruCache; -import org.jxmpp.util.XmppStringUtils; - -/** - * API to create JIDs (XMPP addresses) from Strings and CharSequences. - *

- * If the input was user generated, e.g. captured from some sort of user - * interface, {@link #fromUnescaped(String)} should be used instead. This allows - * the user to enter unescaped JID values. You can use - * {@link org.jxmpp.jid.util.JidUtil#isValidEntityBareJid(CharSequence)} to - * query, e.g. while the user it entering it, if a given CharSequence is a valid - * bare JID. - *

- *

- * JIDs created from input received from an XMPP source should use - * {@link #from(String)}. - *

- *

- * JidCreate uses caches for efficient Jid construction, But it's not guaranteed - * that the same String or CharSequence will yield the same Jid instance. - *

- * - * @see Jid - */ -public class JidCreate { - - private static class JidStringAndStringprep { - private final String jidString; - private final XmppStringprep stringprep; - - private JidStringAndStringprep(String jidString, JxmppContext context) { - this(jidString, context.xmppStringprep); - } - - private JidStringAndStringprep(String jidString, XmppStringprep stringprep) { - this.jidString = jidString; - this.stringprep = stringprep; - } - - @Override - public boolean equals(Object other) { - if (!(other instanceof JidStringAndStringprep)) - return false; - - JidStringAndStringprep otherJidStringAndStringprep = (JidStringAndStringprep) other; - return jidString.equals(otherJidStringAndStringprep.jidString) && stringprep.equals(otherJidStringAndStringprep.stringprep); - } - - private transient Integer hashCode; - - @Override - public int hashCode() { - if (hashCode == null) { - int result = 17; - result = 31 * result + jidString.hashCode(); - result = 31 * result + stringprep.hashCode(); - hashCode = result; - } - return hashCode; - } - } - - private static final Cache JID_CACHE = new LruCache<>(100); - private static final Cache BAREJID_CACHE = new LruCache<>(100); - private static final Cache ENTITYJID_CACHE = new LruCache<>(100); - private static final Cache FULLJID_CACHE = new LruCache<>(100); - private static final Cache ENTITY_BAREJID_CACHE = new LruCache<>(100); - private static final Cache ENTITY_FULLJID_CACHE = new LruCache<>(100); - private static final Cache DOMAINJID_CACHE = new LruCache<>(100); - private static final Cache DOMAINRESOURCEJID_CACHE = new LruCache<>(100); - - /** - * Get a {@link Jid} from the given parts. - *

- * Only the domainpart is required. - *

- * - * @param localpart a optional localpart. - * @param domainpart a required domainpart. - * @param resource a optional resourcepart. - * @return a JID which consists of the given parts. - * @throws XmppStringprepException if an error occurs. - */ - public static Jid from(CharSequence localpart, CharSequence domainpart, CharSequence resource) - throws XmppStringprepException { - return from(localpart.toString(), domainpart.toString(), resource.toString()); - } - - /** - * Get a {@link Jid} from the given parts. - *

- * Only the domainpart is required. - *

- * - * @param localpart a optional localpart. - * @param domainpart a required domainpart. - * @param resource a optional resourcepart. - * @return a JID which consists of the given parts. - * @throws XmppStringprepException if an error occurs. - */ - public static Jid from(String localpart, String domainpart, String resource) throws XmppStringprepException { - return from(localpart, domainpart, resource, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link Jid} from the given parts. - *

- * Only the domainpart is required. - *

- * - * @param localpart a optional localpart. - * @param domainpart a required domainpart. - * @param resource a optional resourcepart. - * @param context the JXMPP context. - * @return a JID which consists of the given parts. - * @throws XmppStringprepException if an error occurs. - */ - public static Jid from(String localpart, String domainpart, String resource, JxmppContext context) throws XmppStringprepException { - String jid = XmppStringUtils.completeJidFrom(localpart, domainpart, resource); - return from(localpart, domainpart, resource, jid, context); - } - - /** - * Get a {@link Jid} from the given parts. - - * - * @param localpart a optional localpart. - * @param domainpart a required domainpart. - * @param resource a optional resourcepart. - * @param jidString the raw String of the as parsed. - * @param context the JXMPP context. - * @return a JID which consists of the given parts. - * @throws XmppStringprepException if an error occurs. - */ - private static Jid from(String localpart, String domainpart, String resource, String jidString, JxmppContext context) throws XmppStringprepException { - // Every JID must come with an domainpart. - if (domainpart.isEmpty()) { - throw XmppStringprepException.MissingDomainpart.from(localpart, resource); - } - - // The provided jidString must be equal to the assembled parts. - assert jidString.equals(XmppStringUtils.completeJidFrom(localpart, domainpart, resource)); - - Jid jid; - - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jidString, context); - } - if (jidStringAndStringprep != null) { - jid = JID_CACHE.lookup(jidStringAndStringprep); - if (jid != null) { - return jid; - } - } - - jid = null; - if (localpart != null && resource != null) { - jid = new LocalDomainAndResourcepartJid(localpart, domainpart, resource, context); - } else if (localpart != null && resource == null) { - jid = new LocalAndDomainpartJid(localpart, domainpart, context); - } else if (localpart == null && resource == null) { - jid = new DomainpartJid(domainpart, context); - } else if (localpart == null && resource != null) { - jid = new DomainAndResourcepartJid(domainpart, resource, context); - } - assert jid != null; - - if (jidStringAndStringprep != null) { - JID_CACHE.put(jidStringAndStringprep, jid); - } - return jid; - } - - /** - * Like {@link #from(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Jid} - * @return the {@link Jid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #from(String) - * @since 0.6.2 - */ - public static Jid fromOrThrowUnchecked(CharSequence cs) { - try { - return from(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link Jid} from a CharSequence. - * - * @param jid the input CharSequence. - * @return the Jid represented by the input CharSequence. - * @throws XmppStringprepException if an error occurs. - * @see #from(String) - */ - public static Jid from(CharSequence jid) throws XmppStringprepException { - return from(jid.toString()); - } - - /** - * Get a {@link Jid} from the given String. - * - * @param jidString the input String. - * @return the Jid represented by the input String. - * @throws XmppStringprepException if an error occurs. - * @see #from(CharSequence) - */ - public static Jid from(String jidString) throws XmppStringprepException { - return from(jidString, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link Jid} from the given String. - * - * @param jidString the input String. - * @param context the JXMPP context. - * @return the Jid represented by the input String. - * @throws XmppStringprepException if an error occurs. - * @see #from(CharSequence) - */ - public static Jid from(String jidString, JxmppContext context) throws XmppStringprepException { - String localpart = XmppStringUtils.parseLocalpart(jidString); - String domainpart = XmppStringUtils.parseDomain(jidString); - String resource = XmppStringUtils.parseResource(jidString); - try { - return from(localpart, domainpart, resource, jidString, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jidString, e); - } - } - - /** - * Get a {@link Jid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static Jid fromOrNull(CharSequence cs) { - try { - return from(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Like {@link #fromUnescaped(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Jid} - * @return the {@link Jid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #fromUnescaped(CharSequence) - * @since 0.6.2 - */ - public static Jid fromUnescapedOrThrowUnchecked(CharSequence cs) { - try { - return fromUnescaped(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link Jid} from the given unescaped CharSequence. - * - * @param unescapedJid an unescaped CharSequence representing a JID. - * @return a JID. - * @throws XmppStringprepException if an error occurs. - */ - public static Jid fromUnescaped(CharSequence unescapedJid) throws XmppStringprepException { - return fromUnescaped(unescapedJid.toString()); - } - - /** - * Get a {@link Jid} from the given unescaped String. - * - * @param unescapedJidString a unescaped String representing a JID. - * @return a JID. - * @throws XmppStringprepException if an error occurs. - */ - public static Jid fromUnescaped(String unescapedJidString) throws XmppStringprepException { - String localpart = XmppStringUtils.parseLocalpart(unescapedJidString); - // Some as from(String), but we escape the localpart - localpart = XmppStringUtils.escapeLocalpart(localpart); - - String domainpart = XmppStringUtils.parseDomain(unescapedJidString); - String resource = XmppStringUtils.parseResource(unescapedJidString); - try { - return from(localpart, domainpart, resource); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(unescapedJidString, e); - } - } - - /** - * Get a {@link Jid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static Jid fromUnescapedOrNull(CharSequence cs) { - try { - return fromUnescaped(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link Jid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded JID. - * @return a JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static Jid fromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return from(decoded); - } - - /** - * Like {@link #bareFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link BareJid} - * @return the {@link BareJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #bareFrom(CharSequence) - * @since 0.6.2 - */ - public static BareJid bareFromOrThrowUnchecked(CharSequence cs) { - try { - return bareFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link BareJid} representing the given CharSequence. - * - * @param jid the input CharSequence. - * @return a bare JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static BareJid bareFrom(CharSequence jid) throws XmppStringprepException { - return bareFrom(jid.toString()); - } - - /** - * Get a {@link BareJid} representing the given String. - * - * @param jid the input String. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static BareJid bareFrom(String jid) throws XmppStringprepException { - return bareFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link BareJid} representing the given String. - * - * @param jid the input String. - * @param context the JXMPP context. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static BareJid bareFrom(String jid, JxmppContext context) throws XmppStringprepException { - BareJid bareJid; - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - if (jidStringAndStringprep != null) { - bareJid = BAREJID_CACHE.lookup(jidStringAndStringprep); - if (bareJid != null) { - return bareJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(jid); - String domainpart = XmppStringUtils.parseDomain(jid); - try { - if (localpart == null || localpart.length() == 0) { - bareJid = new DomainpartJid(domainpart, context); - } else { - bareJid = new LocalAndDomainpartJid(localpart, domainpart, context); - } - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (jidStringAndStringprep != null) { - BAREJID_CACHE.put(jidStringAndStringprep, bareJid); - } - return bareJid; - } - - /** - * Get a {@link BareJid} constructed from the optionally given {@link Localpart} and {link DomainBareJid}. - * - * @param localpart a optional localpart. - * @param domainBareJid a domain bare JID. - * @return a bare JID. - */ - public static BareJid bareFrom(Localpart localpart, DomainBareJid domainBareJid) { - return bareFrom(localpart, domainBareJid.getDomain()); - } - - /** - * Get a {@link BareJid} constructed from the optionally given {@link Localpart} and {@link Domainpart}. - * - * @param localpart a optional localpart. - * @param domain a domainpart. - * @return a bare JID constructed from the given parts. - */ - public static BareJid bareFrom(Localpart localpart, Domainpart domain) { - if (localpart != null) { - return new LocalAndDomainpartJid(localpart, domain); - } else { - return new DomainpartJid(domain); - } - } - - /** - * Get a {@link BareJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static BareJid bareFromOrNull(CharSequence cs) { - try { - return bareFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link BareJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded bare JID. - * @return a bare JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static BareJid bareFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs.toString()); - return bareFrom(decoded); - } - - /** - * Like {@link #fullFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link FullJid} - * @return the {@link FullJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #fullFrom(CharSequence) - * @since 0.6.2 - */ - public static FullJid fullFromOrThrowUnchecked(CharSequence cs) { - try { - return fullFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link FullJid} representing the given CharSequence. - * - * @param jid a CharSequence representing a JID. - * @return a full JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static FullJid fullFrom(CharSequence jid) throws XmppStringprepException { - return fullFrom(jid.toString()); - } - - /** - * Get a {@link FullJid} representing the given String. - * - * @param jid the JID's String. - * @return a full JID representing the input String. - * @throws XmppStringprepException if an error occurs. - */ - public static FullJid fullFrom(String jid) throws XmppStringprepException { - return fullFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link FullJid} representing the given String. - * - * @param jid the JID's String. - * @param context the JXMPP context. - * @return a full JID representing the input String. - * @throws XmppStringprepException if an error occurs. - */ - public static FullJid fullFrom(String jid, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - FullJid fullJid; - if (jidStringAndStringprep != null) { - fullJid = FULLJID_CACHE.lookup(jidStringAndStringprep); - if (fullJid != null) { - return fullJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(jid); - String domainpart = XmppStringUtils.parseDomain(jid); - String resource = XmppStringUtils.parseResource(jid); - try { - fullJid = fullFrom(localpart, domainpart, resource); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (jidStringAndStringprep != null) { - FULLJID_CACHE.put(jidStringAndStringprep, fullJid); - } - - return fullJid; - } - - /** - * Get a {@link FullJid} constructed from the given parts. - * - * @param localpart a optional localpart. - * @param domainpart a domainpart. - * @param resource a resourcepart. - * @return a full JID. - * @throws XmppStringprepException if an error occurs. - */ - public static FullJid fullFrom(String localpart, String domainpart, String resource) throws XmppStringprepException { - return fullFrom(localpart, domainpart, resource, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link FullJid} constructed from the given parts. - * - * @param localpart a optional localpart. - * @param domainpart a domainpart. - * @param resource a resourcepart. - * @param context the JXMPP context. - * @return a full JID. - * @throws XmppStringprepException if an error occurs. - */ - public static FullJid fullFrom(String localpart, String domainpart, String resource, JxmppContext context) throws XmppStringprepException { - FullJid fullJid; - try { - if (localpart == null || localpart.length() == 0) { - fullJid = new DomainAndResourcepartJid(domainpart, resource, context); - } else { - fullJid = new LocalDomainAndResourcepartJid(localpart, domainpart, resource, context); - } - } catch (XmppStringprepException e) { - throw new XmppStringprepException(localpart + '@' + domainpart + '/' + resource, e); - } - return fullJid; - } - - /** - * Get a {@link FullJid} constructed from the given parts. - * - * @param localpart a optional localpart. - * @param domainBareJid a domain bare JID. - * @param resource a resourcepart - * @return a full JID. - */ - public static FullJid fullFrom(Localpart localpart, DomainBareJid domainBareJid, Resourcepart resource) { - return fullFrom(localpart, domainBareJid.getDomain(), resource); - } - - /** - * Get a {@link FullJid} constructed from the given parts. - * - * @param localpart the optional localpart. - * @param domainpart the domainpart. - * @param resource the resourcepart. - * @return a full JID. - */ - public static FullJid fullFrom(Localpart localpart, Domainpart domainpart, Resourcepart resource) { - return fullFrom(entityBareFrom(localpart, domainpart), resource); - } - - /** - * Get a {@link FullJid} constructed from a {@link BareJid} and a {@link Resourcepart}. - * - * @param bareJid a entity bare JID. - * @param resource a resourcepart. - * @return a full JID. - */ - public static FullJid fullFrom(BareJid bareJid, Resourcepart resource) { - if (bareJid.isEntityBareJid()) { - EntityBareJid entityBareJid = (EntityBareJid) bareJid; - return new LocalDomainAndResourcepartJid(entityBareJid, resource); - } else { - DomainBareJid domainBareJid = (DomainBareJid) bareJid; - return new DomainAndResourcepartJid(domainBareJid, resource); - } - } - - /** - * Get a {@link FullJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static FullJid fullFromOrNull(CharSequence cs) { - try { - return fullFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link FullJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded full JID. - * @return a full JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static FullJid fullFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return fullFrom(decoded); - } - - /** - * Like {@link #entityFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityJid} - * @return the {@link EntityJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityFrom(CharSequence) - * @since 0.6.2 - */ - public static EntityJid entityFromOrThrowUnchecked(CharSequence cs) { - try { - return entityFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jid the JID's string. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFrom(CharSequence jid) throws XmppStringprepException { - return entityFrom(jid.toString()); - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jidString the JID's string. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFrom(String jidString) throws XmppStringprepException { - return entityFrom(jidString, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jidString the JID's string. - * @param context the JXMPP context. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFrom(String jidString, JxmppContext context) throws XmppStringprepException { - return entityFrom(jidString, false, context); - } - - /** - * Like {@link #entityFromUnescaped(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityJid} - * @return the {@link EntityJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityFromUnescaped(CharSequence) - * @since 0.6.2 - */ - public static EntityJid entityFromUnescapedOrThrowUnchecked(CharSequence cs) { - return entityFromUnescapedOrThrowUnchecked(cs, JxmppContext.getDefaultContext()); - } - - /** - * Like {@link #entityFromUnescaped(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityJid} - * @param context the JXMPP context. - * @return the {@link EntityJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityFromUnescaped(CharSequence) - * @since 0.6.2 - */ - public static EntityJid entityFromUnescapedOrThrowUnchecked(CharSequence cs, JxmppContext context) { - try { - return entityFromUnescaped(cs, context); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jid the JID. - * @return an entity JID representing the given input.. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFromUnescaped(CharSequence jid) throws XmppStringprepException { - return entityFromUnescaped(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jid the JID. - * @param context the JXMPP context. - * @return an entity JID representing the given input. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFromUnescaped(CharSequence jid, JxmppContext context) throws XmppStringprepException { - return entityFromUnescaped(jid.toString(), context); - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jidString the JID's string. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFromUnescaped(String jidString) throws XmppStringprepException { - return entityFromUnescaped(jidString, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jidString the JID's string. - * @param context the JXMPP context. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityJid entityFromUnescaped(String jidString, JxmppContext context) throws XmppStringprepException { - return entityFrom(jidString, true, context); - } - - /** - * Get a {@link EntityJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - * @deprecated use {@link #entityFromUnescapedOrNull(CharSequence)} instead. - */ - // TODO: remove in jxmpp 1.1 - @Deprecated - public static EntityJid entityFromUnesacpedOrNull(CharSequence cs) { - return entityFromUnescapedOrNull(cs); - } - - /** - * Get a {@link EntityJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityJid entityFromUnescapedOrNull(CharSequence cs) { - try { - return entityFromUnescaped(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link EntityJid} representing the given String. - * - * @param jidString the JID's string. - * @param unescaped if the JID string is unescaped. - * @return an entity JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - private static EntityJid entityFrom(String jidString, boolean unescaped, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jidString, context); - } - - EntityJid entityJid; - if (jidStringAndStringprep != null) { - entityJid = ENTITYJID_CACHE.lookup(jidStringAndStringprep); - if (entityJid != null) { - return entityJid; - } - } - String localpartString = XmppStringUtils.parseLocalpart(jidString); - if (localpartString == null) { - throw new XmppStringprepException("Does not contain a localpart", jidString); - } - Localpart localpart; - try { - if (unescaped) { - localpart = Localpart.fromUnescaped(localpartString); - } else { - localpart = Localpart.from(localpartString); - } - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jidString, e); - } - - String domainpartString = XmppStringUtils.parseDomain(jidString); - Domainpart domainpart; - try { - domainpart = Domainpart.from(domainpartString); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jidString, e); - } - - String resourceString = XmppStringUtils.parseResource(jidString); - if (resourceString != null) { - Resourcepart resourcepart; - try { - resourcepart = Resourcepart.from(resourceString); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jidString, e); - } - entityJid = entityFullFrom(localpart, domainpart, resourcepart); - } else { - entityJid = entityBareFrom(localpart, domainpart); - } - - if (jidStringAndStringprep != null) { - ENTITYJID_CACHE.put(jidStringAndStringprep, entityJid); - } - return entityJid; - } - - /** - * Get a {@link EntityJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityJid entityFromOrNull(CharSequence cs) { - try { - return entityFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link EntityJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded entity JID. - * @return an entity JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static EntityJid entityFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return entityFrom(decoded); - } - - /** - * Like {@link #entityBareFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityBareJid} - * @return the {@link EntityBareJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityBareFrom(CharSequence) - * @since 0.6.2 - */ - public static EntityBareJid entityBareFromOrThrowUnchecked(CharSequence cs) { - try { - return entityBareFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityBareJid} representing the given CharSequence. - * - * @param jid the input CharSequence. - * @return a bare JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFrom(CharSequence jid) throws XmppStringprepException { - return entityBareFrom(jid.toString()); - } - - /** - * Get a {@link EntityBareJid} representing the given String. - * - * @param jid the input String. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFrom(String jid) throws XmppStringprepException { - return entityBareFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityBareJid} representing the given String. - * - * @param jid the input String. - * @param context the JXMPP context. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFrom(String jid, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - EntityBareJid bareJid; - if (jidStringAndStringprep != null) { - bareJid = ENTITY_BAREJID_CACHE.lookup(jidStringAndStringprep); - if (bareJid != null) { - return bareJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(jid); - String domainpart = XmppStringUtils.parseDomain(jid); - try { - bareJid = new LocalAndDomainpartJid(localpart, domainpart, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (jidStringAndStringprep != null) { - ENTITY_BAREJID_CACHE.put(jidStringAndStringprep, bareJid); - } - return bareJid; - } - - /** - * Like {@link #entityBareFromUnescaped(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityBareJid} - * @return the {@link EntityBareJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityBareFromUnescaped(CharSequence) - * @since 0.6.2 - */ - public static EntityBareJid entityBareFromUnescapedOrThrowUnchecked(CharSequence cs) { - try { - return entityBareFromUnescaped(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityBareJid} representing the given unescaped CharSequence. - * - * @param unescapedJid the input CharSequence. - * @return a bare JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFromUnescaped(CharSequence unescapedJid) throws XmppStringprepException { - return entityBareFromUnescaped(unescapedJid.toString()); - } - - /** - * Get a {@link EntityBareJid} representing the given unescaped String. - * - * @param unescapedJidString the input String. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFromUnescaped(String unescapedJidString) throws XmppStringprepException { - return entityBareFromUnescaped(unescapedJidString, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityBareJid} representing the given unescaped String. - * - * @param unescapedJidString the input String. - * @param context the JXMPP context. - * @return a bare JID representing the given String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFromUnescaped(String unescapedJidString, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(unescapedJidString, context); - } - - EntityBareJid bareJid; - if (jidStringAndStringprep != null) { - bareJid = ENTITY_BAREJID_CACHE.lookup(jidStringAndStringprep); - if (bareJid != null) { - return bareJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(unescapedJidString); - // Some as from(String), but we escape the localpart - localpart = XmppStringUtils.escapeLocalpart(localpart); - - String domainpart = XmppStringUtils.parseDomain(unescapedJidString); - try { - bareJid = new LocalAndDomainpartJid(localpart, domainpart, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(unescapedJidString, e); - } - - if (jidStringAndStringprep != null) { - ENTITY_BAREJID_CACHE.put(jidStringAndStringprep, bareJid); - } - - return bareJid; - } - - /** - * Get a {@link EntityBareJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityBareJid entityBareFromUnescapedOrNull(CharSequence cs) { - try { - return entityBareFromUnescaped(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link EntityBareJid} constructed from the given {@link Localpart} and {link DomainBareJid}. - * - * @param localpart a localpart. - * @param domainBareJid a domain bare JID. - * @return a bare JID. - */ - public static EntityBareJid entityBareFrom(Localpart localpart, DomainBareJid domainBareJid) { - return entityBareFrom(localpart, domainBareJid.getDomain()); - } - - /** - * Get a {@link EntityBareJid} constructed from the given {@link Localpart} and {@link Domainpart}. - * - * @param localpart a localpart. - * @param domain a domainpart. - * @return a bare JID constructed from the given parts. - */ - public static EntityBareJid entityBareFrom(Localpart localpart, Domainpart domain) { - return new LocalAndDomainpartJid(localpart, domain); - } - - /** - * Get a {@link EntityBareJid} constructed from the given {@link Localpart} and {@link Domainpart}. - * - * @param localpart a localpart. - * @param domain a domainpart. - * @return a bare JID constructed from the given parts. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityBareJid entityBareFrom(CharSequence localpart, Domainpart domain) throws XmppStringprepException { - return new LocalAndDomainpartJid(Localpart.fromUnescaped(localpart), domain); - } - - /** - * Get a {@link EntityBareJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityBareJid entityBareFromOrNull(CharSequence cs) { - try { - return entityBareFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link EntityBareJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded entity bare JID. - * @return an entity bare JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static EntityBareJid entityBareFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return entityBareFrom(decoded); - } - - /** - * Like {@link #entityFullFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityFullJid} - * @return the {@link EntityFullJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityFullFrom(CharSequence) - * @since 0.6.2 - */ - public static EntityFullJid entityFullFromOrThrowUnchecked(CharSequence cs) { - try { - return entityFullFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityFullJid} representing the given CharSequence. - * - * @param jid a CharSequence representing a JID. - * @return a full JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(CharSequence jid) throws XmppStringprepException { - return entityFullFrom(jid.toString(), JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityFullJid} representing the given CharSequence. - * - * @param jid a CharSequence representing a JID. - * @return a full JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(String jid) throws XmppStringprepException { - return entityFullFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityFullJid} representing the given String. - * - * @param jid the JID's String. - * @param context the JXMPP context. - * @return a full JID representing the input String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(String jid, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - EntityFullJid fullJid; - if (jidStringAndStringprep != null) { - fullJid = ENTITY_FULLJID_CACHE.lookup(jidStringAndStringprep); - if (fullJid != null) { - return fullJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(jid); - String domainpart = XmppStringUtils.parseDomain(jid); - String resource = XmppStringUtils.parseResource(jid); - try { - fullJid = entityFullFrom(localpart, domainpart, resource); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (jidStringAndStringprep != null) { - ENTITY_FULLJID_CACHE.put(jidStringAndStringprep, fullJid); - } - - return fullJid; - } - - /** - * Get a {@link EntityFullJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityFullJid entityFullFromOrNull(CharSequence cs) { - try { - return entityFullFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Like {@link #entityFullFromUnescaped(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityFullJid} - * @return the {@link EntityFullJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #entityFullFromUnescaped(CharSequence) - * @since 0.6.2 - */ - public static EntityFullJid entityFullFromUnescapedOrThrowUnchecked(CharSequence cs) { - try { - return entityFullFromUnescaped(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link EntityFullJid} representing the given unescaped CharSequence. - * - * @param unescapedJid a CharSequence representing a JID. - * @return a full JID representing the given CharSequence. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFromUnescaped(CharSequence unescapedJid) throws XmppStringprepException { - return entityFullFromUnescaped(unescapedJid.toString()); - } - - /** - * Get a {@link EntityFullJid} representing the given unescaped String. - * - * @param unescapedJidString the JID's String. - * @return a full JID representing the input String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFromUnescaped(String unescapedJidString) throws XmppStringprepException { - return entityFullFromUnescaped(unescapedJidString, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityFullJid} representing the given unescaped String. - * - * @param unescapedJidString the JID's String. - * @param context the JXMPP context. - * @return a full JID representing the input String. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFromUnescaped(String unescapedJidString, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(unescapedJidString, context); - } - - EntityFullJid fullJid; - if (jidStringAndStringprep != null) { - fullJid = ENTITY_FULLJID_CACHE.lookup(jidStringAndStringprep); - if (fullJid != null) { - return fullJid; - } - } - - String localpart = XmppStringUtils.parseLocalpart(unescapedJidString); - // Some as from(String), but we escape the localpart - localpart = XmppStringUtils.escapeLocalpart(localpart); - - String domainpart = XmppStringUtils.parseDomain(unescapedJidString); - String resource = XmppStringUtils.parseResource(unescapedJidString); - try { - fullJid = new LocalDomainAndResourcepartJid(localpart, domainpart, resource, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(unescapedJidString, e); - } - - if (jidStringAndStringprep != null) { - ENTITY_FULLJID_CACHE.put(jidStringAndStringprep, fullJid); - } - - return fullJid; - } - - /** - * Get a {@link EntityFullJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static EntityFullJid entityFullFromUnescapedOrNull(CharSequence cs) { - try { - return entityFullFromUnescaped(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link EntityFullJid} constructed from the given parts. - * - * @param localpart a localpart. - * @param domainpart a domainpart. - * @param resource a resourcepart. - * @return a full JID. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(String localpart, String domainpart, String resource) throws XmppStringprepException { - return entityFullFrom(localpart, domainpart, resource, JxmppContext.getDefaultContext()); - } - - /** - * Get a {@link EntityFullJid} constructed from the given parts. - * - * @param localpart a localpart. - * @param domainpart a domainpart. - * @param resource a resourcepart. - * @param context the JXMPP context. - * @return a full JID. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(String localpart, String domainpart, String resource, JxmppContext context) throws XmppStringprepException { - EntityFullJid fullJid; - try { - fullJid = new LocalDomainAndResourcepartJid(localpart, domainpart, resource, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(localpart + '@' + domainpart + '/' + resource, e); - } - return fullJid; - } - - /** - * Get a {@link EntityFullJid} constructed from the given parts. - * - * @param localpart a localpart. - * @param domainBareJid a domain bare JID.. - * @param resource a resourcepart - * @return a full JID. - */ - public static EntityFullJid entityFullFrom(Localpart localpart, DomainBareJid domainBareJid, Resourcepart resource) { - return entityFullFrom(localpart, domainBareJid.getDomain(), resource); - } - - /** - * Get a {@link EntityFullJid} constructed from the given parts. - * - * @param localpart the localpart. - * @param domainpart the domainpart. - * @param resource the resourcepart. - * @return a full JID. - */ - public static EntityFullJid entityFullFrom(Localpart localpart, Domainpart domainpart, Resourcepart resource) { - return entityFullFrom(entityBareFrom(localpart, domainpart), resource); - } - - /** - * Get a {@link EntityFullJid} constructed from the given parts. - * - * @param localpart the localpart. - * @param domainpart the domainpart. - * @param resource the resourcepart. - * @return a full JID. - * @throws XmppStringprepException if an error occurs. - */ - public static EntityFullJid entityFullFrom(CharSequence localpart, Domainpart domainpart, CharSequence resource) throws XmppStringprepException { - return entityFullFrom(entityBareFrom(Localpart.fromUnescaped(localpart), domainpart), Resourcepart.from(resource)); - } - - /** - * Get a {@link EntityFullJid} constructed from a {@link EntityBareJid} and a {@link Resourcepart}. - * - * @param bareJid a bare JID. - * @param resource a resourcepart. - * @return a full JID. - */ - public static EntityFullJid entityFullFrom(EntityBareJid bareJid, Resourcepart resource) { - return new LocalDomainAndResourcepartJid(bareJid, resource); - } - - /** - * Get a {@link EntityFullJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded entity full JID. - * @return an entity full JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static EntityFullJid entityFullFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return entityFullFrom(decoded); - } - - /** - * Like {@link #domainBareFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link EntityFullJid} - * @return the {@link EntityFullJid} if no exception occurs - * @see #from(String) - * @since 0.6.2 - */ - public static DomainBareJid domainBareFromOrThrowUnchecked(CharSequence cs) { - try { - return domainBareFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a domain bare JID. - * - * @param jid the JID CharSequence. - * @return a domain bare JID. - * @throws XmppStringprepException if an error occurs. - */ - public static DomainBareJid domainBareFrom(CharSequence jid) throws XmppStringprepException { - return domainBareFrom(jid.toString()); - } - - /** - * Get a domain bare JID. - * - * @param jid the JID String. - * @return a domain bare JID. - * @throws XmppStringprepException if an error occurs. - */ - public static DomainBareJid domainBareFrom(String jid) throws XmppStringprepException { - return domainBareFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a domain bare JID. - * - * @param jid the JID String. - * @param context the JXMPP context. - * @return a domain bare JID. - * @throws XmppStringprepException if an error occurs. - */ - public static DomainBareJid domainBareFrom(String jid, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - DomainBareJid domainJid; - if (jidStringAndStringprep != null) { - domainJid = DOMAINJID_CACHE.lookup(jidStringAndStringprep); - if (domainJid != null) { - return domainJid; - } - } - - String domain = XmppStringUtils.parseDomain(jid); - try { - domainJid = new DomainpartJid(domain, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (context.isCachingEnabled()) { - DOMAINJID_CACHE.put(jidStringAndStringprep, domainJid); - } - return domainJid; - } - - /** - * Get a {@link DomainBareJid} consisting of the given {@link Domainpart}. - * - * @param domainpart the domainpart. - * @return a domain bare JID. - */ - public static DomainBareJid domainBareFrom(Domainpart domainpart) { - return new DomainpartJid(domainpart); - } - - /** - * Get a {@link DomainBareJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static DomainBareJid domainBareFromOrNull(CharSequence cs) { - try { - return domainBareFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link DomainBareJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded domain bare JID. - * @return a domain bare JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static DomainBareJid domainBareFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decode = urlDecode(cs); - return domainBareFrom(decode); - } - - /** - * Like {@link #domainFullFrom(CharSequence)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link DomainFullJid} - * @return the {@link DomainFullJid} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid JID - * @see #domainFullFrom(CharSequence) - * @since 0.6.2 - */ - public static DomainFullJid domainFullFromOrThrowUnchecked(CharSequence cs) { - try { - return domainFullFrom(cs); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a domain full JID from the given CharSequence. - * - * @param jid the JID. - * @return a domain full JID. - * @throws XmppStringprepException if an error happens. - */ - public static DomainFullJid domainFullFrom(CharSequence jid) throws XmppStringprepException { - return domainFullFrom(jid.toString()); - } - - /** - * Get a domain full JID from the given String. - * - * @param jid the JID. - * @return a DomainFullJid. - * @throws XmppStringprepException if an error happens. - */ - public static DomainFullJid domainFullFrom(String jid) throws XmppStringprepException { - return domainFullFrom(jid, JxmppContext.getDefaultContext()); - } - - /** - * Get a domain full JID from the given String. - * - * @param jid the JID. - * @param context the JXMPP context. - * @return a DomainFullJid. - * @throws XmppStringprepException if an error happens. - */ - public static DomainFullJid domainFullFrom(String jid, JxmppContext context) throws XmppStringprepException { - JidStringAndStringprep jidStringAndStringprep = null; - if (context.isCachingEnabled()) { - jidStringAndStringprep = new JidStringAndStringprep(jid, context); - } - - DomainFullJid domainResourceJid; - if (jidStringAndStringprep != null) { - domainResourceJid = DOMAINRESOURCEJID_CACHE.lookup(jidStringAndStringprep); - if (domainResourceJid != null) { - return domainResourceJid; - } - } - - String domain = XmppStringUtils.parseDomain(jid); - String resource = XmppStringUtils.parseResource(jid); - try { - domainResourceJid = new DomainAndResourcepartJid(domain, resource, context); - } catch (XmppStringprepException e) { - throw new XmppStringprepException(jid, e); - } - - if (jidStringAndStringprep != null) { - DOMAINRESOURCEJID_CACHE.put(jidStringAndStringprep, domainResourceJid); - } - - return domainResourceJid; - } - - /** - * Get a domain full JID. - * - * @param domainpart the domainpart. - * @param resource the resourcepart. - * @return a domain full JID. - */ - public static DomainFullJid domainFullFrom(Domainpart domainpart, Resourcepart resource) { - return domainFullFrom(domainBareFrom(domainpart), resource); - } - - /** - * Get a domain full JID. - * - * @param domainBareJid a domain bare JID. - * @param resource a resourcepart. - * @return a domain full JID. - */ - public static DomainFullJid domainFullFrom(DomainBareJid domainBareJid, Resourcepart resource) { - return new DomainAndResourcepartJid(domainBareJid, resource); - } - - /** - * Get a {@link DomainFullJid} from a given {@link CharSequence} or {@code null} if the input does not represent a JID. - * - * @param cs the input {@link CharSequence} - * @return a JID or {@code null} - */ - public static DomainFullJid domainFullFromOrNull(CharSequence cs) { - try { - return domainFullFrom(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link DomainFullJid} from an URL encoded CharSequence. - * - * @param cs a CharSequence representing an URL encoded domain full JID. - * @return a domain full JID - * @throws XmppStringprepException if an error occurs. - * @see URLDecoder - */ - public static DomainFullJid domainFullFromUrlEncoded(CharSequence cs) throws XmppStringprepException { - String decoded = urlDecode(cs); - return domainFullFrom(decoded); - } - - private static String urlDecode(CharSequence cs) { - try { - return URLDecoder.decode(cs.toString(), "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new AssertionError(e); - } - } -} diff --git a/src/main/java/org/jxmpp/jid/impl/LocalAndDomainpartJid.java b/src/main/java/org/jxmpp/jid/impl/LocalAndDomainpartJid.java deleted file mode 100644 index 845b6d7..0000000 --- a/src/main/java/org/jxmpp/jid/impl/LocalAndDomainpartJid.java +++ /dev/null @@ -1,182 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.impl; - -import org.jxmpp.JxmppContext; -import org.jxmpp.jid.BareJid; -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; -import org.jxmpp.stringprep.XmppStringprepException; - - -public final class LocalAndDomainpartJid extends AbstractJid implements EntityBareJid { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private final DomainBareJid domainBareJid; - private final Localpart localpart; - - private transient String unescapedCache; - - LocalAndDomainpartJid(String localpart, String domain, JxmppContext context) throws XmppStringprepException { - domainBareJid = new DomainpartJid(domain, context); - this.localpart = Localpart.from(localpart, context); - } - - LocalAndDomainpartJid(Localpart localpart, Domainpart domain) { - this.localpart = requireNonNull(localpart, "The Localpart must not be null"); - this.domainBareJid = new DomainpartJid(domain); - } - - @Override - public Localpart getLocalpart() { - return localpart; - } - - @Override - public String toString() { - if (cache != null) { - return cache; - } - cache = getLocalpart().toString() + '@' + domainBareJid.toString(); - return cache; - } - - @Override - public String asUnescapedString() { - if (unescapedCache != null) { - return unescapedCache; - } - unescapedCache = getLocalpart().asUnescapedString() + '@' + domainBareJid.toString(); - return unescapedCache; - } - - @Override - public EntityBareJid asEntityBareJidIfPossible() { - return this; - } - - @Override - public EntityFullJid asEntityFullJidIfPossible() { - return null; - } - - @Override - public DomainFullJid asDomainFullJidIfPossible() { - return null; - } - - @Override - public boolean isParentOf(EntityBareJid bareJid) { - return domainBareJid.equals(bareJid.getDomain()) && localpart.equals(bareJid.getLocalpart()); - } - - @Override - public boolean isParentOf(EntityFullJid fullJid) { - return isParentOf(fullJid.asBareJid()); - } - - @Override - public boolean isParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isParentOf(DomainFullJid domainFullJid) { - return false; - } - - @Override - public boolean isStrictParentOf(EntityBareJid bareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(EntityFullJid fullJid) { - return isParentOf(fullJid); - } - - @Override - public boolean isStrictParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainFullJid domainFullJid) { - return false; - } - - @Override - public DomainBareJid asDomainBareJid() { - return domainBareJid; - } - - @Override - public Domainpart getDomain() { - return domainBareJid.getDomain(); - } - - @Override - public BareJid asBareJid() { - return this; - } - - @Override - public boolean hasNoResource() { - return true; - } - - @Override - public EntityJid asEntityJidIfPossible() { - return this; - } - - @Override - public FullJid asFullJidIfPossible() { - return null; - } - - @Override - public EntityBareJid asEntityBareJid() { - return this; - } - - @Override - public Resourcepart getResourceOrNull() { - return null; - } - - @Override - public Localpart getLocalpartOrNull() { - return getLocalpart(); - } - - @Override - public String asEntityBareJidString() { - return toString(); - } -} diff --git a/src/main/java/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java b/src/main/java/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java deleted file mode 100644 index 4f6be3b..0000000 --- a/src/main/java/org/jxmpp/jid/impl/LocalDomainAndResourcepartJid.java +++ /dev/null @@ -1,185 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.impl; - -import org.jxmpp.JxmppContext; -import org.jxmpp.jid.BareJid; -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.EntityJid; -import org.jxmpp.jid.FullJid; -import org.jxmpp.jid.parts.Domainpart; -import org.jxmpp.jid.parts.Localpart; -import org.jxmpp.jid.parts.Resourcepart; -import org.jxmpp.stringprep.XmppStringprepException; - -public final class LocalDomainAndResourcepartJid extends AbstractJid implements EntityFullJid { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private final EntityBareJid bareJid; - private final Resourcepart resource; - - private String unescapedCache; - - LocalDomainAndResourcepartJid(String localpart, String domain, String resource, JxmppContext context) throws XmppStringprepException { - this(new LocalAndDomainpartJid(localpart, domain, context), Resourcepart.from(resource, context)); - } - - LocalDomainAndResourcepartJid(EntityBareJid bareJid, Resourcepart resource) { - this.bareJid = requireNonNull(bareJid, "The EntityBareJid must not be null"); - this.resource = requireNonNull(resource, "The Resourcepart must not be null"); - } - - @Override - public String toString() { - if (cache != null) { - return cache; - } - cache = bareJid.toString() + '/' + resource; - return cache; - } - - @Override - public String asUnescapedString() { - if (unescapedCache != null) { - return unescapedCache; - } - unescapedCache = bareJid.asUnescapedString() + '/' + resource; - return unescapedCache; - } - - @Override - public EntityBareJid asEntityBareJid() { - return bareJid; - } - - @Override - public String asEntityBareJidString() { - return asEntityBareJid().toString(); - } - - @Override - public boolean hasNoResource() { - return false; - } - - @Override - public EntityBareJid asEntityBareJidIfPossible() { - return asEntityBareJid(); - } - - @Override - public EntityFullJid asEntityFullJidIfPossible() { - return this; - } - - @Override - public DomainFullJid asDomainFullJidIfPossible() { - return null; - } - - @Override - public Localpart getLocalpartOrNull() { - return bareJid.getLocalpart(); - } - - @Override - public Resourcepart getResourceOrNull() { - return getResourcepart(); - } - - @Override - public boolean isParentOf(EntityBareJid bareJid) { - return false; - } - - @Override - public boolean isParentOf(EntityFullJid fullJid) { - return this.equals(fullJid); - } - - @Override - public boolean isParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isParentOf(DomainFullJid domainFullJid) { - return false; - } - - @Override - public boolean isStrictParentOf(EntityBareJid bareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(EntityFullJid fullJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainBareJid domainBareJid) { - return false; - } - - @Override - public boolean isStrictParentOf(DomainFullJid domainFullJid) { - return false; - } - - @Override - public DomainBareJid asDomainBareJid() { - return bareJid.asDomainBareJid(); - } - - @Override - public Resourcepart getResourcepart() { - return resource; - } - - @Override - public BareJid asBareJid() { - return asEntityBareJid(); - } - - @Override - public Domainpart getDomain() { - return bareJid.getDomain(); - } - - @Override - public Localpart getLocalpart() { - return bareJid.getLocalpart(); - } - - @Override - public EntityJid asEntityJidIfPossible() { - return this; - } - - @Override - public FullJid asFullJidIfPossible() { - return this; - } -} diff --git a/src/main/java/org/jxmpp/jid/impl/package-info.java b/src/main/java/org/jxmpp/jid/impl/package-info.java deleted file mode 100644 index bf824ed..0000000 --- a/src/main/java/org/jxmpp/jid/impl/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * JXMPP's implementation of {@link org.jxmpp.jid.Jid} and it's subtypes. - */ -package org.jxmpp.jid.impl; diff --git a/src/main/java/org/jxmpp/jid/package-info.java b/src/main/java/org/jxmpp/jid/package-info.java deleted file mode 100644 index ee10d57..0000000 --- a/src/main/java/org/jxmpp/jid/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Interfaces and classes for XMPP Addresses (JIDs). - */ -package org.jxmpp.jid; diff --git a/src/main/java/org/jxmpp/jid/parts/Domainpart.java b/src/main/java/org/jxmpp/jid/parts/Domainpart.java deleted file mode 100644 index 832a533..0000000 --- a/src/main/java/org/jxmpp/jid/parts/Domainpart.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * - * Copyright © 2014-2018 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.jxmpp.jid.parts; - -import org.jxmpp.JxmppContext; -import org.jxmpp.stringprep.XmppStringPrepUtil; -import org.jxmpp.stringprep.XmppStringprepException; - -/** - * A domainpart of an XMPP address (JID). - *

- * You can create instances of this class from Strings using {@link #from(String)}. - *

- * - * @see RFC 6122 § 2.2. Domainpart - */ -public class Domainpart extends Part { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private Domainpart(String domain) { - super(domain); - } - - /** - * Get a {@link Domainpart} from a given {@link CharSequence} or {@code null} if the input is not a valid domainpart. - * - * @param cs the input CharSequence - * @return a Domainpart or {@code null} - */ - public static Domainpart fromOrNull(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Like {@link #from(String)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Domainpart} - * @return the {@link Domainpart} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid {@link Domainpart} - * @see #from(String) - * @since 0.6.2 - */ - public static Domainpart fromOrThrowUnchecked(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get the {@link Domainpart} representing the input String. - * - * @param domain the input String. - * @return the domainpart. - * @throws XmppStringprepException if an error occurs. - */ - public static Domainpart from(String domain) throws XmppStringprepException { - return from(domain, JxmppContext.getDefaultContext()); - } - - /** - * Get the {@link Domainpart} representing the input String. - * - * @param domain the input String. - * @param context the JXMPP context. - * @return the domainpart. - * @throws XmppStringprepException if an error occurs. - */ - public static Domainpart from(String domain, JxmppContext context) throws XmppStringprepException { - if (domain == null) { - throw new XmppStringprepException(domain, "Input 'domain' must not be null"); - } - // TODO cache - // RFC 6122 § 2.2 "If the domainpart includes a final character considered to be a label - // separator (dot) by [IDNA2003] or [DNS], this character MUST be stripped …" - if (domain.length() > 0 && domain.charAt(domain.length() - 1) == '.') { - domain = domain.substring(0, domain.length() - 1); - } - domain = XmppStringPrepUtil.domainprep(domain, context); - // First prep the String, then assure the limits of the *result* - assertNotLongerThan1023BytesOrEmpty(domain); - return new Domainpart(domain); - } -} diff --git a/src/main/java/org/jxmpp/jid/parts/Localpart.java b/src/main/java/org/jxmpp/jid/parts/Localpart.java deleted file mode 100644 index 90a283e..0000000 --- a/src/main/java/org/jxmpp/jid/parts/Localpart.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * - * Copyright © 2014-2018 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.jxmpp.jid.parts; - -import org.jxmpp.JxmppContext; -import org.jxmpp.stringprep.XmppStringPrepUtil; -import org.jxmpp.stringprep.XmppStringprepException; -import org.jxmpp.util.XmppStringUtils; - -/** - * A localpart of an XMPP address (JID). The localpart is the part before the - * first @ sign in an XMPP address and usually identifies the user (or the XMPP - * entity) within an XMPP service. It is also often referred to as "username", - * but note that the actual username used to login may be different from the - * resulting localpart of the user's JID. - *

- * You can create instances of this class from Strings using {@link #from(String)}. - *

- * - * @see RFC - * 6122 § 2.3. Localpart - */ -public class Localpart extends Part { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private transient String unescapedCache; - - private Localpart(String localpart) { - super(localpart); - } - - /** - * Return the unescaped String representation of this Localpart. - *

- * Since certain Unicode code points are disallowed in the localpart of a JID by the required stringprep profile, - * those need to get escaped when used in a real JID. The unescaped representation of the JID is only for - * presentation to a human user or for gatewaying to a non-XMPP system. - *

- * - * @return the unescaped String representation of this JID. - * @see org.jxmpp.jid.Jid#asUnescapedString() - * @since 0.6.1 - */ - public String asUnescapedString() { - if (unescapedCache != null) { - return unescapedCache; - } - unescapedCache = XmppStringUtils.unescapeLocalpart(toString()); - return unescapedCache; - } - - /** - * Like {@link #from(String)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Localpart} - * @return the {@link Localpart} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid {@link Localpart} - * @see #from(String) - * @since 0.6.2 - */ - public static Localpart fromOrThrowUnchecked(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Like {@link #fromUnescaped(String)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Localpart} - * @return the {@link Localpart} if no exception occurs - * @see #from(String) - * @since 0.6.2 - */ - public static Localpart fromUnescapedOrThrowUnchecked(CharSequence cs) { - try { - return fromUnescaped(cs.toString()); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get a {@link Localpart} from a given {@link CharSequence} or {@code null} if the input is not a valid localpart. - * - * @param cs the input CharSequence - * @return a Localpart or {@code null} - */ - public static Localpart formUnescapedOrNull(CharSequence cs) { - try { - return fromUnescaped(cs); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get a {@link Localpart} from an unescaped String. - * - * @param unescapedLocalpart an unescaped String representing a Localpart. - * @return a Localpart - * @throws XmppStringprepException if an error occurs. - * @since 0.6.2 - */ - public static Localpart fromUnescaped(String unescapedLocalpart) throws XmppStringprepException { - String escapedLocalpartString = XmppStringUtils.escapeLocalpart(unescapedLocalpart); - return from(escapedLocalpartString); - } - - /** - * Get a {@link Localpart} from an unescaped CharSequence. - * - * @param unescapedLocalpart an unescaped CharSequence representing a Localpart. - * @return a Localpart - * @throws XmppStringprepException if an error occurs. - * @since 0.6.2 - */ - public static Localpart fromUnescaped(CharSequence unescapedLocalpart) throws XmppStringprepException { - return fromUnescaped(unescapedLocalpart.toString()); - } - - /** - * Get a {@link Localpart} from a given {@link CharSequence} or {@code null} if the input is not a valid localpart. - * - * @param cs the input CharSequence - * @return a Localpart or {@code null} - */ - public static Localpart fromOrNull(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Get the {@link Localpart} representing the input String. - * - * @param localpart the input String. - * @return the localpart. - * @throws XmppStringprepException if an error occurs. - */ - public static Localpart from(String localpart) throws XmppStringprepException { - return from(localpart, JxmppContext.getDefaultContext()); - } - - /** - * Get the {@link Localpart} representing the input String. - * - * @param localpart the input String. - * @param context the JXMPP context. - * @return the localpart. - * @throws XmppStringprepException if an error occurs. - */ - public static Localpart from(String localpart, JxmppContext context) throws XmppStringprepException { - localpart = XmppStringPrepUtil.localprep(localpart, context); - // First prep the String, then assure the limits of the *result* - assertNotLongerThan1023BytesOrEmpty(localpart); - return new Localpart(localpart); - } -} diff --git a/src/main/java/org/jxmpp/jid/parts/Part.java b/src/main/java/org/jxmpp/jid/parts/Part.java deleted file mode 100644 index b2c3ad3..0000000 --- a/src/main/java/org/jxmpp/jid/parts/Part.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * - * Copyright © 2014-2019 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.jxmpp.jid.parts; - -import java.io.Serializable; -import java.nio.charset.StandardCharsets; - -import org.jxmpp.stringprep.XmppStringprepException; - -public abstract class Part implements CharSequence, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private final String part; - - protected Part(String part) { - this.part = part; - } - - @Override - public final int length() { - return part.length(); - } - - @Override - public final char charAt(int index) { - return part.charAt(index); - } - - @Override - public final CharSequence subSequence(int start, int end) { - return part.subSequence(start, end); - } - - @Override - public final String toString() { - return part; - } - - @Override - public final boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null) { - return false; - } - return part.equals(other.toString()); - } - - @Override - public final int hashCode() { - return part.hashCode(); - } - - protected static void assertNotLongerThan1023BytesOrEmpty(String string) throws XmppStringprepException { - byte[] bytes = string.getBytes(StandardCharsets.UTF_8); - - // Better throw XmppStringprepException instead of IllegalArgumentException here, because users don't expect an - // IAE and it also makes the error handling for users easier. - if (bytes.length > 1023) { - throw new XmppStringprepException(string, "Given string is longer then 1023 bytes"); - } else if (bytes.length == 0) { - throw new XmppStringprepException(string, "Argument can't be the empty string"); - } - } - - /** - * The cache holding the internalized value of this part. This needs to be transient so that the - * cache is recreated once the data was de-serialized. - */ - private transient String internalizedCache; - - /** - * Returns the canonical String representation of this Part. See {@link String#intern} for details. - * - * @return the canonical String representation. - */ - public final String intern() { - if (internalizedCache == null) { - internalizedCache = toString().intern(); - } - return internalizedCache; - } -} diff --git a/src/main/java/org/jxmpp/jid/parts/Resourcepart.java b/src/main/java/org/jxmpp/jid/parts/Resourcepart.java deleted file mode 100644 index 39be445..0000000 --- a/src/main/java/org/jxmpp/jid/parts/Resourcepart.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.parts; - -import org.jxmpp.JxmppContext; -import org.jxmpp.stringprep.XmppStringPrepUtil; -import org.jxmpp.stringprep.XmppStringprepException; - -/** - * A resourcepart of an XMPP address (JID). - *

- * You can create instances of this class from Strings using {@link #from(String)}. - *

- * - * @see RFC 6122 § 2.4. Resourcepart - */ -public class Resourcepart extends Part { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * The empty resource part. - *

- * This empty resource part is the part that is represented by the empty String. This is useful in cases where you - * have a collection of Resourceparts that does not allow null values, but you want to deal with the - * "no resource" case. - *

- */ - public static final Resourcepart EMPTY = new Resourcepart(""); - - private Resourcepart(String resource) { - super(resource); - } - - /** - * Get a {@link Resourcepart} from a given {@link CharSequence} or {@code null} if the input is not a valid resourcepart. - * - * @param cs the input CharSequence - * @return a Resourcepart or {@code null} - */ - public static Resourcepart fromOrNull(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - return null; - } - } - - /** - * Like {@link #from(String)} but does throw an unchecked {@link IllegalArgumentException} instead of a - * {@link XmppStringprepException}. - * - * @param cs the character sequence which should be transformed to a {@link Resourcepart} - * @return the {@link Resourcepart} if no exception occurs - * @throws IllegalArgumentException if the given input is not a valid {@link Resourcepart} - * @see #from(String) - * @since 0.6.2 - */ - public static Resourcepart fromOrThrowUnchecked(CharSequence cs) { - try { - return from(cs.toString()); - } catch (XmppStringprepException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Get the {@link Resourcepart} representing the input String. - * - * @param resource the input String. - * @return the resource part. - * @throws XmppStringprepException if an error occurs. - */ - public static Resourcepart from(String resource) throws XmppStringprepException { - return from(resource, JxmppContext.getDefaultContext()); - } - - /** - * Get the {@link Resourcepart} representing the input String. - * - * @param resource the input String. - * @return the resource part. - * @throws XmppStringprepException if an error occurs. - */ - public static Resourcepart from(CharSequence resource) throws XmppStringprepException { - return from(resource.toString()); - } - - /** - * Get the {@link Resourcepart} representing the input String. - * - * @param resource the input String. - * @param context the JXMPP context. - * @return the resource part. - * @throws XmppStringprepException if an error occurs. - */ - public static Resourcepart from(String resource, JxmppContext context) throws XmppStringprepException { - resource = XmppStringPrepUtil.resourceprep(resource, context); - // First prep the String, then assure the limits of the *result* - assertNotLongerThan1023BytesOrEmpty(resource); - return new Resourcepart(resource); - }} diff --git a/src/main/java/org/jxmpp/jid/parts/package-info.java b/src/main/java/org/jxmpp/jid/parts/package-info.java deleted file mode 100644 index cafb433..0000000 --- a/src/main/java/org/jxmpp/jid/parts/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Classes representing JID parts (Local-, Resource- and Domainpart). - */ -package org.jxmpp.jid.parts; diff --git a/src/main/java/org/jxmpp/jid/util/JidUtil.java b/src/main/java/org/jxmpp/jid/util/JidUtil.java deleted file mode 100644 index 386bbfb..0000000 --- a/src/main/java/org/jxmpp/jid/util/JidUtil.java +++ /dev/null @@ -1,424 +0,0 @@ -/** - * - * Copyright © 2014-2024 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.jxmpp.jid.util; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.jxmpp.jid.EntityBareJid; -import org.jxmpp.jid.DomainFullJid; -import org.jxmpp.jid.EntityFullJid; -import org.jxmpp.jid.Jid; -import org.jxmpp.jid.impl.JidCreate; -import org.jxmpp.stringprep.XmppStringprepException; -import org.jxmpp.util.XmppStringUtils; - -public class JidUtil { - - /** - * Check if the given CharSequence represents a typical and valid entity bare JID. This method does perform the same - * check as {@link #isValidEntityBareJid(CharSequence)} and additionally verifies that the domainpart of the JID - * contains at least one dot ('.') character. - *

- * For more information about the different verification methods see {@link #validateEntityBareJid(CharSequence)}. - *

- * - * @param jid the CharSequence to check. - * @return true if {@code jid} represents a valid entity bare JID, false otherwise - * @see #isValidEntityBareJid(CharSequence) - * @see EntityBareJid - */ - public static boolean isTypicalValidEntityBareJid(CharSequence jid) { - try { - validateTypicalEntityBareJid(jid); - } catch (NotAEntityBareJidStringException | XmppStringprepException e) { - return false; - } - return true; - } - - /** - * Check if the given CharSequence is a typical and valid entity bare JID. This method does perform the same - * check as {@link #isValidEntityBareJid(CharSequence)} and additionally verifies that the domainpart of the JID - * contains at least one dot ('.') character. - *

- * The …TypicalValidEntityBareJid(CharSequence) methods are useful if you expect your users to always - * enter a FQDN as domainpart. Whereas isValidEntityBareJid(CharSequence) and - * validateEntityBareJid accept also inputs like "foo@example", the "is typical JID" methods require - * the domainpart to contain a dot, e.g. "foo@example.org". - *

- * - * @param jidcs the JID CharSequence - * @return a BareJid instance representing the given JID CharSequence - * @throws NotAEntityBareJidStringException if the given CharSequence is not a bare JID. - * @throws XmppStringprepException if an error happens. - */ - public static EntityBareJid validateTypicalEntityBareJid(CharSequence jidcs) throws NotAEntityBareJidStringException, XmppStringprepException { - EntityBareJid jid = validateEntityBareJid(jidcs); - if (jid.getDomain().toString().indexOf('.') == -1) { - throw new NotAEntityBareJidStringException("Domainpart does not include a dot ('.') character"); - } - return jid; - } - - /** - * Check if the given CharSequence represents a valid entity bare JID. That - * is, it must consists exactly of a local- and a domainpart - * (<localpart@domainpart>). - *

- * This method is meant to validate user input and give fast feedback (e.g. - * with a red or green light) about if the user entered CharSequence - * represents a bare JID. - *

- * - * @param jid - * the CharSequence to check. - * @return true if {@code jid} represents a valid entity bare JID, false otherwise - * @see EntityBareJid - */ - public static boolean isValidEntityBareJid(CharSequence jid) { - try { - validateEntityBareJid(jid); - } catch (NotAEntityBareJidStringException | XmppStringprepException e) { - return false; - } - return true; - } - - /** - * Check if the given CharSequence is a valid entity bare JID. That - * is, it must consists exactly of a local- and a domainpart - * (<localpart@domainpart>). - *

- * This is a convenience method meant to validate user entered bare JIDs. If - * the given {@code jid} is not a valid bare JID, then this method will - * throw either {@link NotAEntityBareJidStringException} or - * {@link XmppStringprepException}. The NotABareJidStringException will - * contain a meaningful message explaining why the given CharSequence is not a - * valid bare JID (e.g. "does not contain a '@' character"). - *

- * - * @param jidcs the JID CharSequence - * @return a BareJid instance representing the given JID CharSequence - * @throws NotAEntityBareJidStringException if the given CharSequence is not a bare JID. - * @throws XmppStringprepException if an error happens. - */ - public static EntityBareJid validateEntityBareJid(CharSequence jidcs) throws NotAEntityBareJidStringException, XmppStringprepException { - String jid = jidcs.toString(); - final int atIndex = jid.indexOf('@'); - if (atIndex == -1) { - throw new NotAEntityBareJidStringException("'" + jid + "' does not contain a '@' character"); - } else if (jid.indexOf('@', atIndex + 1) != -1) { - throw new NotAEntityBareJidStringException("'" + jid + "' contains multiple '@' characters"); - } - final String localpart = XmppStringUtils.parseLocalpart(jid); - if (localpart == null || localpart.length() == 0) { - throw new NotAEntityBareJidStringException("'" + jid + "' has empty localpart"); - } - final String domainpart = XmppStringUtils.parseDomain(jid); - if (domainpart == null || domainpart.length() == 0) { - throw new NotAEntityBareJidStringException("'" + jid + "' has empty domainpart"); - } - return JidCreate.entityBareFromUnescaped(jid); - } - - public static class NotAEntityBareJidStringException extends Exception { - /** - * - */ - private static final long serialVersionUID = -1710386661031655082L; - - /** - * Construct a new "not a entity bare JID" exception. - * - * @param message the message of the exception. - */ - public NotAEntityBareJidStringException(String message) { - super(message); - } - } - - /** - * Filter all entity bare JIDs. - * - * @param in the input collection. - * @param out the collection where the filtered JIDs are added to. - */ - public static void filterEntityBareJid(Collection in, Collection out) { - for (Jid jid : in) { - EntityBareJid bareJid = jid.asEntityBareJidIfPossible(); - if (bareJid != null) { - out.add(bareJid); - } - } - } - - /** - * Filter all entity bare JIDs. - * - * @param input the input collection. - * @return a set containing all bare JIDs of the input collection. - */ - public static Set filterEntityBareJidSet(Collection input) { - Set res = new HashSet(input.size()); - filterEntityBareJid(input, res); - return res; - } - - /** - * Filter all entity bare JIDs. - * - * @param input the input collection. - * @return a list containing all bare JIDs of the input collection. - */ - public static List filterEntityBareJidList(Collection input) { - List res = new ArrayList(input.size()); - filterEntityBareJid(input, res); - return res; - } - - /** - * Filter all entity full JIDs. - * - * @param in the input collection. - * @param out the collection where the filtered JIDs are added to. - */ - public static void filterEntityFullJid(Collection in, Collection out) { - for (Jid jid : in) { - EntityFullJid fullJid = jid.asEntityFullJidIfPossible(); - if (fullJid != null) { - out.add(fullJid); - } - } - } - - /** - * Filter all full JIDs. - * - * @param input the input collection. - * @return a set containing all full JIDs of the input collection. - */ - public static Set filterEntityFullJidSet(Collection input) { - Set res = new HashSet(input.size()); - filterEntityFullJid(input, res); - return res; - } - - /** - * Filter all full JIDs. - * - * @param input the input collection. - * @return a list containing all full JIDs of the input collection. - */ - public static List filterEntityFullJidList(Collection input) { - List res = new ArrayList(input.size()); - filterEntityFullJid(input, res); - return res; - } - - /** - * Filter all domain full JIDs. - * - * @param in the input collection. - * @param out the collection where the filtered JIDs are added to. - */ - public static void filterDomainFullJid(Collection in, Collection out) { - for (Jid jid : in) { - DomainFullJid domainFullJid = jid.asDomainFullJidIfPossible(); - if (domainFullJid != null) { - out.add(domainFullJid); - } - } - } - - /** - * Filter all domain full JIDs. - * - * @param input the input collection. - * @return a set containing all domain full JIDs of the input collection. - */ - public static Set filterDomainFullJidSet(Collection input) { - Set res = new HashSet(input.size()); - filterDomainFullJid(input, res); - return res; - } - - /** - * Filter all domain full JIDs. - * - * @param input the input collection. - * @return a list containing all domain full JIDs of the input collection. - */ - public static List filterDomainFullJidList(Collection input) { - List res = new ArrayList(input.size()); - filterDomainFullJid(input, res); - return res; - } - - /** - * Convert the given collection of CharSequences to bare JIDs. - * - * @param jidStrings the collection of CharSequences. - * @return a set of bare JIDs. - */ - public static Set entityBareJidSetFrom(Collection jidStrings) { - Set res = new HashSet(jidStrings.size()); - entityBareJidsFrom(jidStrings, res, null); - return res; - } - - /** - * Convert a collection of Strings to a Set of {@link EntityBareJid}'s. - *

- * If the optional argument exceptions is given, then all {@link XmppStringprepException} thrown while - * converting will be added to the list. Otherwise, if an XmppStringprepExceptions is thrown, it will be wrapped in - * a AssertionError Exception and throw. - *

- * - * @param jidStrings - * the strings that are going to get converted - * @param output - * the collection where the BareJid's will be added to - * @param exceptions the list of exceptions thrown while converting. - */ - public static void entityBareJidsFrom(Collection jidStrings, Collection output, - List exceptions) { - for (CharSequence jid : jidStrings) { - try { - EntityBareJid bareJid = JidCreate.entityBareFrom(jid); - output.add(bareJid); - } catch (XmppStringprepException e) { - if (exceptions != null) { - exceptions.add(e); - } else { - throw new AssertionError(e); - } - } - } - } - - /** - * Convert the given array of Strings to JIDs. - *

- * Note that errors while converting the Strings will be silently ignored. - *

- * - * @param jids a array of JID Strings. - * @return a set of JIDs. - */ - public static Set jidSetFrom(String[] jids) { - return jidSetFrom(Arrays.asList(jids)); - } - - /** - * Convert the given collection of CharSequences to JIDs. - * - * @param jidStrings the collection of CharSequences. - * @return a set of JIDs. - */ - public static Set jidSetFrom(Collection jidStrings) { - Set res = new HashSet(jidStrings.size()); - jidsFrom(jidStrings, res, null); - return res; - } - - /** - * Convert a collection of Strings to a Set of {@link Jid}'s. - *

- * If the optional argument exceptions is given, then all {@link XmppStringprepException} thrown while - * converting will be added to the list. Otherwise, if an XmppStringprepExceptions is thrown, it will be wrapped in - * a AssertionError Exception and throw. - *

- * - * @param jidStrings - * the strings that are going to get converted - * @param output - * the collection where the Jid's will be added to - * @param exceptions the list of exceptions thrown while converting. - */ - public static void jidsFrom(Collection jidStrings, Collection output, - List exceptions) { - for (CharSequence jidString : jidStrings) { - try { - Jid jid = JidCreate.from(jidString); - output.add(jid); - } catch (XmppStringprepException e) { - if (exceptions != null) { - exceptions.add(e); - } else { - throw new AssertionError(e); - } - } - } - } - - /** - * Convert a collection of JIDs to a list of Strings representing those JIDs. - * - * @param jids a collection of JIDs. - * @return a list of Strings. - */ - public static List toStringList(Collection jids) { - List res = new ArrayList(jids.size()); - toStrings(jids, res); - return res; - } - - /** - * convert a collection of JIDs to a set of Strings representing those JIDs. - * - * @param jids a collection of JIDs. - * @return a set of String. - */ - public static Set toStringSet(Collection jids) { - Set res = new HashSet(jids.size()); - toStrings(jids, res); - return res; - } - - /** - * Convert a collection of JIDs to a Collection of Strings. - * - * @param jids the collection of Strings to convert. - * @param jidStrings the collection of Strings to append to. - */ - public static void toStrings(Collection jids, Collection jidStrings) { - for (Jid jid : jids) { - jidStrings.add(jid.toString()); - } - } - - /** - * Check if two JIDs are equals. Takes null values into consideration. Which means that this method will return true if both JIDs are null. - * - * @param jidOne The first JID to compare. - * @param jidTwo The second JID to compare. - * @return true if both JIDs are equals. - * @since 0.7.0 - */ - public static boolean equals(Jid jidOne, Jid jidTwo) { - if (jidOne != null) { - return jidOne.equals(jidTwo); - } - - return jidTwo == null; - } -} diff --git a/src/main/java/org/jxmpp/jid/util/package-info.java b/src/main/java/org/jxmpp/jid/util/package-info.java deleted file mode 100644 index f33d57f..0000000 --- a/src/main/java/org/jxmpp/jid/util/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Utility classes for JIDs. - */ -package org.jxmpp.jid.util;