/*
 * Copyright (C) 2007 Esmertec AG. Copyright (C) 2007 The Android Open Source
 * Project
 *
 * 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 info.guardianproject.otr.app.im.engine;

import info.guardianproject.otr.app.im.plugin.xmpp.XmppAddress;
import android.os.Parcel;
import android.os.Parcelable;

public class Contact extends ImEntity implements Parcelable {

    private Address mAddress;
    private String mName;
    private Presence mPresence;

    private Address mAddressWithResource;

    public Contact(Address address, String name) {
        mAddress = address;
        mName = name;

        mPresence = new Presence();
    }

    public Contact(Parcel source) {
        mAddress = AddressParcelHelper.readFromParcel(source);
        mName = source.readString();
        mPresence = new Presence(source);
    }

    public Address getAddress() {
        if (mAddressWithResource != null)
            return mAddressWithResource;
        else
            return mAddress;
    }

    public String getName() {
        return mName;
    }

    public void setName( String aName ) {
        mName = aName;
    }

    public Presence getPresence() {
        return mPresence;
    }

    public boolean equals(Object other) {

        return other instanceof Contact && mAddress.getBareAddress().equals(((Contact) other).getAddress().getBareAddress());
    }

    public int hashCode() {
        return mAddress.hashCode();
    }

    /* Set the presence of the Contact. Note that this method is public but not
     * provide to the user.
     *
     * @param presence the new presence
     */
    public void setPresence(Presence presence) {
        mPresence = presence;
        if (mPresence != null && mPresence.getResource() != null)
            mAddressWithResource = new XmppAddress(mAddress.getBareAddress() + '/' + mPresence.getResource());
    }

    public void writeToParcel(Parcel dest, int flags) {
        AddressParcelHelper.writeToParcel(dest, mAddress);
        dest.writeString(mName);
        mPresence.writeToParcel(dest, 0);
    }

    public int describeContents() {
        return 0;
    }

    public final static Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>() {
        public Contact createFromParcel(Parcel source) {
            return new Contact(source);
        }

        public Contact[] newArray(int size) {
            return new Contact[size];
        }
    };
}

@@ -970,51 +970,8 @@
 e;%0A%0A
-    private Address mAddressWithResource;%0A%0A
     
@@ -1334,108 +1334,8 @@
 ) %7B%0A
-        if (mAddressWithResource != null)%0A            return mAddressWithResource;%0A        else%0A    
     
@@ -2141,20 +2141,8 @@
 ress
-WithResource
  = n

simplify implementation based on @eighthave recommendation