com.norman0406.slimgress.API.Item.ItemBase.java Source code

Java tutorial

Introduction

Here is the source code for com.norman0406.slimgress.API.Item.ItemBase.java

Source

/***********************************************************************
*
* Slimgress: Ingress API for Android
* Copyright (C) 2013 Norman Link <norman.link@gmx.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/

package com.norman0406.slimgress.API.Item;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.norman0406.slimgress.API.Common.EntityBase;

import android.util.Log;

public abstract class ItemBase extends EntityBase {
    public enum ItemType {
        Media, ModForceAmp, ModHeatsink, ModLinkAmp, ModMultihack, ModShield, ModTurret, PortalKey, PowerCube, Resonator, FlipCard, WeaponXMP, WeaponUltraStrike,
    }

    public enum Rarity {
        None, VeryCommon, Common, LessCommon, Rare, VeryRare, ExtraRare
    }

    private int mItemAccessLevel = 0;
    private Rarity mItemRarity = Rarity.None;
    private final ItemType mItemType;
    private String mItemPlayerId;
    private String mItemAcquisitionTimestamp;

    public static ItemBase createByJSON(JSONArray json) throws JSONException {
        if (json.length() != 3) {
            Log.e("ItemBase", "invalid array size");
            return null;
        }

        JSONObject item = json.getJSONObject(2);

        JSONObject itemResource = null;
        if (item.has("resource"))
            itemResource = item.getJSONObject("resource");
        else if (item.has("resourceWithLevels"))
            itemResource = item.getJSONObject("resourceWithLevels");
        else if (item.has("modResource"))
            itemResource = item.getJSONObject("modResource");

        // create item
        ItemBase newItem = null;

        String itemType = itemResource.getString("resourceType");
        if (itemType.equals(ItemPortalKey.getNameStatic()))
            newItem = new ItemPortalKey(json);
        else if (itemType.equals(ItemWeaponXMP.getNameStatic()))
            newItem = new ItemWeaponXMP(json);
        else if (itemType.equals(ItemWeaponUltraStrike.getNameStatic()))
            newItem = new ItemWeaponUltraStrike(json);
        else if (itemType.equals(ItemResonator.getNameStatic()))
            newItem = new ItemResonator(json);
        else if (itemType.equals(ItemModShield.getNameStatic()))
            newItem = new ItemModShield(json);
        else if (itemType.equals(ItemPowerCube.getNameStatic()))
            newItem = new ItemPowerCube(json);
        else if (itemType.equals(ItemMedia.getNameStatic()))
            newItem = new ItemMedia(json);
        else if (itemType.equals(ItemModForceAmp.getNameStatic()))
            newItem = new ItemModForceAmp(json);
        else if (itemType.equals(ItemModMultihack.getNameStatic()))
            newItem = new ItemModMultihack(json);
        else if (itemType.equals(ItemModLinkAmp.getNameStatic()))
            newItem = new ItemModLinkAmp(json);
        else if (itemType.equals(ItemModTurret.getNameStatic()))
            newItem = new ItemModTurret(json);
        else if (itemType.equals(ItemModHeatsink.getNameStatic()))
            newItem = new ItemModHeatsink(json);
        else if (itemType.equals(ItemFlipCard.getNameStatic()))
            newItem = new ItemFlipCard(json);
        else {
            // unknown resource type
            Log.w("Item", "unknown resource type: " + itemType);
        }

        return newItem;
    }

    protected ItemBase(ItemType type, JSONArray json) throws JSONException {
        super(json);
        mItemType = type;

        JSONObject item = json.getJSONObject(2);
        JSONObject itemResource = null;
        if (item.has("resource"))
            itemResource = item.getJSONObject("resource");
        else if (item.has("resourceWithLevels"))
            itemResource = item.getJSONObject("resourceWithLevels");
        else if (item.has("modResource"))
            itemResource = item.getJSONObject("modResource");
        else
            throw new JSONException("resource not found");

        if (itemResource.has("resourceRarity") || itemResource.has("rarity")) {
            String rarity = null;
            if (itemResource.has("resourceRarity"))
                rarity = itemResource.getString("resourceRarity");
            else if (itemResource.has("rarity"))
                rarity = itemResource.getString("rarity");
            else
                throw new RuntimeException("unknown rarity string");

            if (mItemRarity != null) {
                if (rarity.equals("VERY_COMMON"))
                    mItemRarity = ItemBase.Rarity.VeryCommon;
                else if (rarity.equals("COMMON"))
                    mItemRarity = ItemBase.Rarity.Common;
                else if (rarity.equals("LESS_COMMON"))
                    mItemRarity = ItemBase.Rarity.LessCommon;
                else if (rarity.equals("RARE"))
                    mItemRarity = ItemBase.Rarity.Rare;
                else if (rarity.equals("VERY_RARE"))
                    mItemRarity = ItemBase.Rarity.VeryRare;
                else if (rarity.equals("EXTREMELY_RARE"))
                    mItemRarity = ItemBase.Rarity.ExtraRare;
            }
        }

        if (itemResource.has("level")) {
            int level = itemResource.getInt("level");
            mItemAccessLevel = level;
        }

        JSONObject itemInInventory = item.getJSONObject("inInventory");
        mItemPlayerId = itemInInventory.getString("playerId");
        mItemAcquisitionTimestamp = itemInInventory.getString("acquisitionTimestampMs");
    }

    public static String getNameStatic() {
        // override!
        throw new RuntimeException("this method has to be overridden");
    }

    public abstract String getName();

    public int getItemAccessLevel() {
        return mItemAccessLevel;
    }

    public Rarity getItemRarity() {
        return mItemRarity;
    }

    public String getItemPlayerId() {
        return mItemPlayerId;
    }

    public String getItemAcquisitionTimestamp() {
        return mItemAcquisitionTimestamp;
    }

    public ItemType getItemType() {
        return mItemType;
    }
}