001package com.github.theholywaffle.teamspeak3.api.wrapper;
002
003/*
004 * #%L
005 * TeamSpeak 3 Java API
006 * %%
007 * Copyright (C) 2014 - 2015 Bert De Geyter, Roger Baumgartner
008 * %%
009 * Permission is hereby granted, free of charge, to any person obtaining a copy
010 * of this software and associated documentation files (the "Software"), to deal
011 * in the Software without restriction, including without limitation the rights
012 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
013 * copies of the Software, and to permit persons to whom the Software is
014 * furnished to do so, subject to the following conditions:
015 * 
016 * The above copyright notice and this permission notice shall be included in
017 * all copies or substantial portions of the Software.
018 * 
019 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
020 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
021 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
022 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
023 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
024 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
025 * THE SOFTWARE.
026 * #L%
027 */
028
029import com.github.theholywaffle.teamspeak3.api.ChannelProperty;
030import com.github.theholywaffle.teamspeak3.api.Codec;
031
032import java.util.Map;
033
034public abstract class ChannelBase extends Wrapper {
035
036        public ChannelBase(Map<String, String> map) {
037                super(map);
038        }
039
040        public abstract int getId();
041
042        public int getParentChannelId() {
043                return getInt(ChannelProperty.PID);
044        }
045
046        public int getOrder() {
047                return getInt(ChannelProperty.CHANNEL_ORDER);
048        }
049
050        public String getName() {
051                return get(ChannelProperty.CHANNEL_NAME);
052        }
053
054        public String getTopic() {
055                return get(ChannelProperty.CHANNEL_TOPIC);
056        }
057
058        public boolean isDefault() {
059                return getBoolean(ChannelProperty.CHANNEL_FLAG_DEFAULT);
060        }
061
062        public boolean hasPassword() {
063                return getBoolean(ChannelProperty.CHANNEL_FLAG_PASSWORD);
064        }
065
066        public boolean isPermanent() {
067                return getBoolean(ChannelProperty.CHANNEL_FLAG_PERMANENT);
068        }
069
070        public boolean isSemiPermanent() {
071                return getBoolean(ChannelProperty.CHANNEL_FLAG_SEMI_PERMANENT);
072        }
073
074        public Codec getCodec() {
075                final int codec = getInt(ChannelProperty.CHANNEL_CODEC);
076                for (final Codec c : Codec.values()) {
077                        if (c.getIndex() == codec) {
078                                return c;
079                        }
080                }
081                return Codec.UNKNOWN;
082        }
083
084        public int getCodecQuality() {
085                return getInt(ChannelProperty.CHANNEL_CODEC_QUALITY);
086        }
087
088        public int getNeededTalkPower() {
089                return getInt(ChannelProperty.CHANNEL_NEEDED_TALK_POWER);
090        }
091
092        public long getIconId() {
093                return getLong(ChannelProperty.CHANNEL_ICON_ID);
094        }
095
096        public int getMaxClients() {
097                return getInt(ChannelProperty.CHANNEL_MAXCLIENTS);
098        }
099
100        public int getMaxFamilyClients() {
101                return getInt(ChannelProperty.CHANNEL_MAXFAMILYCLIENTS);
102        }
103
104        public int getSecondsEmpty() {
105                return getInt(ChannelProperty.SECONDS_EMPTY);
106        }
107
108        /**
109         * @return {@code true}, if the channel and all child channels are empty, {@code false} otherwise.
110         */
111        abstract public boolean isFamilyEmpty();
112}