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}