001/**
002 *
003 * Copyright © 2014-2018 Florian Schmaus
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.jxmpp.jid.impl;
018
019import org.jxmpp.jid.BareJid;
020import org.jxmpp.jid.EntityBareJid;
021import org.jxmpp.jid.DomainBareJid;
022import org.jxmpp.jid.DomainFullJid;
023import org.jxmpp.jid.EntityFullJid;
024import org.jxmpp.jid.EntityJid;
025import org.jxmpp.jid.FullJid;
026import org.jxmpp.jid.parts.Domainpart;
027import org.jxmpp.jid.parts.Localpart;
028import org.jxmpp.jid.parts.Resourcepart;
029import org.jxmpp.stringprep.XmppStringprepException;
030
031
032public final class LocalAndDomainpartJid extends AbstractJid implements EntityBareJid {
033
034        /**
035         *
036         */
037        private static final long serialVersionUID = 1L;
038
039        private final DomainBareJid domainBareJid;
040        private final Localpart localpart;
041
042        private transient String unescapedCache;
043
044        LocalAndDomainpartJid(String localpart, String domain) throws XmppStringprepException {
045                domainBareJid = new DomainpartJid(domain);
046                this.localpart = Localpart.from(localpart);
047        }
048
049        LocalAndDomainpartJid(Localpart localpart, Domainpart domain) {
050                this.localpart = requireNonNull(localpart, "The Localpart must not be null");
051                this.domainBareJid = new DomainpartJid(domain);
052        }
053
054        @Override
055        public Localpart getLocalpart() {
056                return localpart;
057        }
058
059        @Override
060        public String toString() {
061                if (cache != null) {
062                        return cache;
063                }
064                cache = getLocalpart().toString() + '@' + domainBareJid.toString();
065                return cache;
066        }
067
068        @Override
069        public String asUnescapedString() {
070                if (unescapedCache != null) {
071                        return unescapedCache;
072                }
073                unescapedCache = getLocalpart().asUnescapedString() + '@' + domainBareJid.toString();
074                return unescapedCache;
075        }
076
077        @Override
078        public EntityBareJid asEntityBareJidIfPossible() {
079                return this;
080        }
081
082        @Override
083        public EntityFullJid asEntityFullJidIfPossible() {
084                return null;
085        }
086
087        @Override
088        public DomainFullJid asDomainFullJidIfPossible() {
089                return null;
090        }
091
092        @Override
093        public boolean isParentOf(EntityBareJid bareJid) {
094                return domainBareJid.equals(bareJid.getDomain()) && localpart.equals(bareJid.getLocalpart());
095        }
096
097        @Override
098        public boolean isParentOf(EntityFullJid fullJid) {
099                return isParentOf(fullJid.asBareJid());
100        }
101
102        @Override
103        public boolean isParentOf(DomainBareJid domainBareJid) {
104                return false;
105        }
106
107        @Override
108        public boolean isParentOf(DomainFullJid domainFullJid) {
109                return false;
110        }
111
112        @Override
113        public DomainBareJid asDomainBareJid() {
114                return domainBareJid;
115        }
116
117        @Override
118        public Domainpart getDomain() {
119                return domainBareJid.getDomain();
120        }
121
122        @Override
123        public BareJid asBareJid() {
124                return this;
125        }
126
127        @Override
128        public boolean hasNoResource() {
129                return true;
130        }
131
132        @Override
133        public EntityJid asEntityJidIfPossible() {
134                return this;
135        }
136
137        @Override
138        public FullJid asFullJidIfPossible() {
139                return null;
140        }
141
142        @Override
143        public EntityBareJid asEntityBareJid() {
144                return this;
145        }
146
147        @Override
148        public Resourcepart getResourceOrNull() {
149                return null;
150        }
151
152        @Override
153        public Localpart getLocalpartOrNull() {
154                return getLocalpart();
155        }
156
157        @Override
158        public String asEntityBareJidString() {
159                return toString();
160        }
161}