//
// Copyright (c) 2014 VK.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
package com.vk.sdk.api.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import org.json.JSONObject;
/**
* Represents full community profile.
*/
@SuppressWarnings("unused")
public class VKApiCommunityFull extends VKApiCommunity implements Parcelable {
/**
* Filed city from VK fields set
*/
public final static String CITY = "city";
/**
* Filed country from VK fields set
*/
public final static String COUNTRY = "country";
/**
* Filed place from VK fields set
*/
public final static String PLACE = "place";
/**
* Filed description from VK fields set
*/
public final static String DESCRIPTION = "description";
/**
* Filed wiki_page from VK fields set
*/
public final static String WIKI_PAGE = "wiki_page";
/**
* Filed members_count from VK fields set
*/
public final static String MEMBERS_COUNT = "members_count";
/**
* Filed counters from VK fields set
*/
public final static String COUNTERS = "counters";
/**
* Filed start_date from VK fields set
*/
public final static String START_DATE = "start_date";
/**
* Filed end_date from VK fields set
*/
public final static String END_DATE = "end_date";
/**
* Filed can_post from VK fields set
*/
public final static String CAN_POST = "can_post";
/**
* Filed can_see_all_posts from VK fields set
*/
public final static String CAN_SEE_ALL_POSTS = "can_see_all_posts";
/**
* Filed status from VK fields set
*/
public final static String STATUS = "status";
/**
* Filed contacts from VK fields set
*/
public final static String CONTACTS = "contacts";
/**
* Filed links from VK fields set
*/
public final static String LINKS = "links";
/**
* Filed fixed_post from VK fields set
*/
public final static String FIXED_POST = "fixed_post";
/**
* Filed verified from VK fields set
*/
public final static String VERIFIED = "verified";
/**
* Filed blacklisted from VK fields set
*/
public final static String BLACKLISTED = "blacklisted";
/**
* Filed site from VK fields set
*/
public final static String SITE = "site";
/**
* Filed activity from VK fields set
*/
public final static String ACTIVITY = "activity";
/**
* City specified in information about community.
*/
public VKApiCity city;
/**
* Country specified in information about community.
*/
public VKApiCountry country;
/**
* Audio which broadcasting to status.
*/
public VKApiAudio status_audio;
/**
* The location which specified in information about community
*/
public VKApiPlace place;
/**
* Community description text.
*/
public String description;
/**
* Name of the home wiki-page of the community.
*/
public String wiki_page;
/**
* Number of community members.
*/
public int members_count;
/**
* Counters object with community counters.
*/
public Counters counters;
/**
* Returned only for meeting and contain start time of the meeting as unixtime.
*/
public long start_date;
/**
* Returned only for meeting and contain end time of the meeting as unixtime.
*/
public long end_date;
/**
* Whether the current user can post on the community's wall
*/
public boolean can_post;
/**
* Whether others' posts on the community's wall can be viewed
*/
public boolean can_see_all_posts;
/**
* Group status.
*/
public String status;
/**
* Information from public page contact module.
*/
public VKList<Contact> contacts;
/**
* Information from public page links module.
*/
public VKList<Link> links;
/**
* ID of fixed post of this community.
*/
public int fixed_post;
/**
* Information whether the community has a verified page in VK
*/
public boolean verified;
/**
* URL of community site
*/
public String site;
/**
* Information whether the current community has add current user to the blacklist.
*/
public boolean blacklisted;
public VKApiCommunityFull() {
super();
}
public VKApiCommunityFull parse(JSONObject jo) {
super.parse(jo);
JSONObject city = jo.optJSONObject(CITY);
if(city != null) {
this.city = new VKApiCity().parse(city);
}
JSONObject country = jo.optJSONObject(COUNTRY);
if(country != null) {
this.country = new VKApiCountry().parse(country);
}
JSONObject place = jo.optJSONObject(PLACE);
if(place != null) this.place = new VKApiPlace().parse(place);
description = jo.optString(DESCRIPTION);
wiki_page = jo.optString(WIKI_PAGE);
members_count = jo.optInt(MEMBERS_COUNT);
JSONObject counters = jo.optJSONObject(COUNTERS);
if(counters != null) this.counters = new Counters(place);
start_date = jo.optLong(START_DATE);
end_date = jo.optLong(END_DATE);
can_post = ParseUtils.parseBoolean(jo, CAN_POST);
can_see_all_posts = ParseUtils.parseBoolean(jo, CAN_SEE_ALL_POSTS);
status = jo.optString(STATUS);
JSONObject status_audio = jo.optJSONObject("status_audio");
if(status_audio != null) this.status_audio = new VKApiAudio().parse(status_audio);
contacts = new VKList<Contact>(jo.optJSONArray(CONTACTS), Contact.class);
links = new VKList<Link>(jo.optJSONArray(LINKS), Link.class);
fixed_post = jo.optInt(FIXED_POST);
verified = ParseUtils.parseBoolean(jo, VERIFIED);
blacklisted = ParseUtils.parseBoolean(jo, VERIFIED);
site = jo.optString(SITE);
return this;
}
public static class Counters implements Parcelable {
/**
* Значение в том случае, если счетчик не был явно указан.
*/
public final static int NO_COUNTER = -1;
public int photos = NO_COUNTER;
public int albums = NO_COUNTER;
public int audios = NO_COUNTER;
public int videos = NO_COUNTER;
public int topics = NO_COUNTER;
public int docs = NO_COUNTER;
public Counters(JSONObject from) {
photos = from.optInt("photos", photos);
albums = from.optInt("albums", albums);
audios = from.optInt("audios", audios);
videos = from.optInt("videos", videos);
topics = from.optInt("topics", topics);
docs = from.optInt("docs", docs);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.photos);
dest.writeInt(this.albums);
dest.writeInt(this.audios);
dest.writeInt(this.videos);
dest.writeInt(this.topics);
dest.writeInt(this.docs);
}
private Counters(Parcel in) {
this.photos = in.readInt();
this.albums = in.readInt();
this.audios = in.readInt();
this.videos = in.readInt();
this.topics = in.readInt();
this.docs = in.readInt();
}
public static Creator<Counters> CREATOR = new Creator<Counters>() {
public Counters createFromParcel(Parcel source) {
return new Counters(source);
}
public Counters[] newArray(int size) {
return new Counters[size];
}
};
}
public static class Contact extends VKApiModel implements Parcelable, Identifiable {
public int user_id;
public VKApiUser user;
public String email;
public String desc;
public Contact(JSONObject from) {
parse(from);
}
public Contact parse(JSONObject from) {
user_id = from.optInt("user_id");
desc = from.optString("desc");
email = from.optString("email");
return this;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.user_id);
dest.writeString(this.desc);
}
private Contact(Parcel in) {
this.user_id = in.readInt();
this.desc = in.readString();
}
public static Creator<Contact> CREATOR = new Creator<Contact>() {
public Contact createFromParcel(Parcel source) {
return new Contact(source);
}
public Contact[] newArray(int size) {
return new Contact[size];
}
};
@Override
public int getId() {
return user_id;
}
@Override
public String toString() {
if(user != null) {
return user.toString();
} else if(email != null) {
return email;
}
return null;
}
}
public static class Link extends VKApiModel implements Parcelable, Identifiable {
public String url;
public String name;
public String desc;
public VKPhotoSizes photo = new VKPhotoSizes();
public Link(JSONObject from) {
parse(from);
}
public Link parse(JSONObject from) {
url = from.optString("url");
name = from.optString("name");
desc = from.optString("desc");
String photo_50 = from.optString("photo_50");
if(!TextUtils.isEmpty(photo_50)) {
photo.add(VKApiPhotoSize.create(photo_50, 50));
}
String photo_100 = from.optString("photo_100");
if(!TextUtils.isEmpty(photo_100)) {
photo.add(VKApiPhotoSize.create(photo_100, 100));
}
photo.sort();
return this;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.url);
dest.writeString(this.name);
dest.writeString(this.desc);
dest.writeParcelable(this.photo, flags);
}
public Link(Parcel in) {
this.url = in.readString();
this.name = in.readString();
this.desc = in.readString();
this.photo = in.readParcelable(null);
}
public static Creator<Link> CREATOR = new Creator<Link>() {
public Link createFromParcel(Parcel source) {
return new Link(source);
}
public Link[] newArray(int size) {
return new Link[size];
}
};
@Override
public int getId() {
return 0;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeParcelable(this.city, flags);
dest.writeParcelable(this.country, flags);
dest.writeParcelable(this.status_audio, flags);
dest.writeParcelable(this.place, flags);
dest.writeString(this.description);
dest.writeString(this.wiki_page);
dest.writeInt(this.members_count);
dest.writeParcelable(this.counters, flags);
dest.writeLong(this.start_date);
dest.writeLong(this.end_date);
dest.writeByte(can_post ? (byte) 1 : (byte) 0);
dest.writeByte(can_see_all_posts ? (byte) 1 : (byte) 0);
dest.writeString(this.status);
dest.writeParcelable(this.contacts, flags);
dest.writeParcelable(this.links, flags);
dest.writeInt(this.fixed_post);
dest.writeByte(verified ? (byte) 1 : (byte) 0);
dest.writeString(this.site);
dest.writeByte(blacklisted ? (byte) 1 : (byte) 0);
}
public VKApiCommunityFull(Parcel in) {
super(in);
this.city = in.readParcelable(VKApiCity.class.getClassLoader());
this.country = in.readParcelable(VKApiCountry.class.getClassLoader());
this.status_audio = in.readParcelable(VKApiAudio.class.getClassLoader());
this.place = in.readParcelable(VKApiPlace.class.getClassLoader());
this.description = in.readString();
this.wiki_page = in.readString();
this.members_count = in.readInt();
this.counters = in.readParcelable(Counters.class.getClassLoader());
this.start_date = in.readLong();
this.end_date = in.readLong();
this.can_post = in.readByte() != 0;
this.can_see_all_posts = in.readByte() != 0;
this.status = in.readString();
this.contacts = in.readParcelable(VKList.class.getClassLoader());
this.links = in.readParcelable(VKList.class.getClassLoader());
this.fixed_post = in.readInt();
this.verified = in.readByte() != 0;
this.site = in.readString();
this.blacklisted = in.readByte() != 0;
}
public static Creator<VKApiCommunityFull> CREATOR = new Creator<VKApiCommunityFull>() {
public VKApiCommunityFull createFromParcel(Parcel source) {
return new VKApiCommunityFull(source);
}
public VKApiCommunityFull[] newArray(int size) {
return new VKApiCommunityFull[size];
}
};
}