001/**
002 *
003 * Copyright © 2014-2017 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
031public final class LocalDomainAndResourcepartJid extends AbstractJid implements EntityFullJid {
032
033        /**
034         *
035         */
036        private static final long serialVersionUID = 1L;
037
038        private final EntityBareJid bareJid;
039        private final Resourcepart resource;
040
041        private String unescapedCache;
042
043        LocalDomainAndResourcepartJid(String localpart, String domain, String resource) throws XmppStringprepException {
044                this(new LocalAndDomainpartJid(localpart, domain), Resourcepart.from(resource));
045        }
046
047        LocalDomainAndResourcepartJid(EntityBareJid bareJid, Resourcepart resource) {
048                this.bareJid = requireNonNull(bareJid, "The EntityBareJid must not be null");
049                this.resource = requireNonNull(resource, "The Resourcepart must not be null");
050        }
051
052        @Override
053        public String toString() {
054                if (cache != null) {
055                        return cache;
056                }
057                cache = bareJid.toString() + '/' + resource;
058                return cache;
059        }
060
061        @Override
062        public String asUnescapedString() {
063                if (unescapedCache != null) {
064                        return unescapedCache;
065                }
066                unescapedCache = bareJid.asUnescapedString() + '/' + resource;
067                return unescapedCache;
068        }
069
070        @Override
071        public EntityBareJid asEntityBareJid() {
072                return bareJid;
073        }
074
075        @Override
076        public String asEntityBareJidString() {
077                return asEntityBareJid().toString();
078        }
079
080        @Override
081        public boolean hasNoResource() {
082                return false;
083        }
084
085        @Override
086        public EntityBareJid asEntityBareJidIfPossible() {
087                return asEntityBareJid();
088        }
089
090        @Override
091        public EntityFullJid asEntityFullJidIfPossible() {
092                return this;
093        }
094
095        @Override
096        public DomainFullJid asDomainFullJidIfPossible() {
097                return null;
098        }
099
100        @Override
101        public Localpart getLocalpartOrNull() {
102                return bareJid.getLocalpart();
103        }
104
105        @Override
106        public Resourcepart getResourceOrNull() {
107                return getResourcepart();
108        }
109
110        @Override
111        public boolean isParentOf(EntityBareJid bareJid) {
112                return false;
113        }
114
115        @Override
116        public boolean isParentOf(EntityFullJid fullJid) {
117                return this.equals(fullJid);
118        }
119
120        @Override
121        public boolean isParentOf(DomainBareJid domainBareJid) {
122                return false;
123        }
124
125        @Override
126        public boolean isParentOf(DomainFullJid domainFullJid) {
127                return false;
128        }
129
130        @Override
131        public DomainBareJid asDomainBareJid() {
132                return bareJid.asDomainBareJid();
133        }
134
135        @Override
136        public Resourcepart getResourcepart() {
137                return resource;
138        }
139
140        @Override
141        public BareJid asBareJid() {
142                return asEntityBareJid();
143        }
144
145        @Override
146        public Domainpart getDomain() {
147                return bareJid.getDomain();
148        }
149
150        @Override
151        public Localpart getLocalpart() {
152                return bareJid.getLocalpart();
153        }
154
155        @Override
156        public EntityJid asEntityJidIfPossible() {
157                return this;
158        }
159
160        @Override
161        public FullJid asFullJidIfPossible() {
162                return this;
163        }
164}