Package net.canarymod.backbone

Source Code of net.canarymod.backbone.BackboneBans

package net.canarymod.backbone;

import java.util.ArrayList;

import net.canarymod.Canary;
import net.canarymod.bansystem.Ban;
import net.canarymod.database.DataAccess;
import net.canarymod.database.Database;
import net.canarymod.database.exceptions.DatabaseReadException;
import net.canarymod.database.exceptions.DatabaseWriteException;

/**
* Backbone to the ban System. This contains NO logic, it is only the data
* source access!
*
* @author Chris
*/
public class BackboneBans extends Backbone {

    public BackboneBans() {
        super(Backbone.System.BANS);
        try {
            Database.get().updateSchema(new BanDataAccess());
        }
        catch (DatabaseWriteException e) {
            Canary.logStacktrace("Failed to update Database Schema!", e);
        }
    }

    private boolean banExists(Ban ban) {
        BanDataAccess data = new BanDataAccess();

        try {
            Database.get().load(data, new String[]{ "player" }, new Object[]{ ban.getSubject() });
        }
        catch (DatabaseReadException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
        return data.hasData();
    }

    /**
     * Add a new Ban to the list of bans.
     *
     * @param ban
     *         The ban to add.
     */
    public void addBan(Ban ban) {
        if (banExists(ban)) {
            updateBan(ban);
            return;
        }
        BanDataAccess data = new BanDataAccess();

        data.player = ban.getSubject();
        data.banningPlayer = ban.getBanningPlayer();
        data.unbanDate = ban.getTimestamp();
        data.reason = ban.getReason();
        data.ip = ban.getIp();
        try {
            Database.get().insert(data);
        }
        catch (DatabaseWriteException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
    }

    /**
     * Lift a ban that was issued for the player with the given name
     *
     * @param subject
     *         Player name to unban.
     */
    public void liftBan(String subject) {
        try {
            Database.get().remove("ban", new String[]{ "player" }, new Object[]{ subject });
        }
        catch (DatabaseWriteException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
    }

    /**
     * Lift an IP ban.
     *
     * @param subject
     *         IP Address to unban.
     */
    public void liftIpBan(String subject) {
        try {
            Database.get().remove("ban", new String[]{ "ip" }, new Object[]{ subject });
        }
        catch (DatabaseWriteException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
    }

    /**
     * Get a ban for this player name.
     * This may return null if the ban does not exist
     *
     * @param name
     *         Ban for the player with the given name or null if none.
     *
     * @return Returns a ban object if that ban was found, null otherwise
     */
    public Ban getBan(String name) {
        BanDataAccess data = new BanDataAccess();

        try {
            Database.get().load(data, new String[]{ "player" }, new Object[]{ name });
        }
        catch (DatabaseReadException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
        if (!data.hasData()) {
            return null;
        }
        Ban newBan = new Ban();
        newBan.setIp(data.ip);
        newBan.setIsIpBan(!data.ip.contains("xxx"));
        newBan.setReason(data.reason);
        newBan.setSubject(data.player);
        newBan.setTimestamp(data.unbanDate);
        newBan.setBanningPlayer(data.banningPlayer);
        return newBan;
    }

    /**
     * Update a ban.
     *
     * @param ban
     *         Ban instance to update.
     */
    public void updateBan(Ban ban) {
        BanDataAccess data = new BanDataAccess();

        try {
            Database.get().load(data, new String[]{ "player" }, new Object[]{ ban.getSubject() });
            if (data.hasData()) {
                data.banningPlayer = ban.getBanningPlayer();
                data.ip = ban.getIp();
                data.player = ban.getSubject();
                data.reason = ban.getReason();
                data.unbanDate = ban.getTimestamp();
                Database.get().update(data, new String[]{ "player" }, new Object[]{ ban.getSubject() });
            }

        }
        catch (DatabaseReadException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
        catch (DatabaseWriteException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }

    }

    /**
     * Load and return all recorded bans
     *
     * @return An array list of all recorded ban instances.
     */
    public ArrayList<Ban> loadBans() {
        ArrayList<Ban> banList = new ArrayList<Ban>();
        ArrayList<DataAccess> dataList = new ArrayList<DataAccess>();

        try {
            Database.get().loadAll(new BanDataAccess(), dataList, new String[]{ }, new Object[]{ });
            for (DataAccess da : dataList) {
                BanDataAccess data = (BanDataAccess) da;
                Ban ban = new Ban();

                ban.setBanningPlayer(data.banningPlayer);
                ban.setIp(data.ip);
                ban.setIsIpBan(!data.ip.contains("xxx"));
                ban.setReason(data.reason);
                ban.setSubject(data.player);
                ban.setTimestamp(data.unbanDate);
                banList.add(ban);
            }
        }
        catch (DatabaseReadException e) {
            Canary.logStacktrace(e.getMessage(), e);
        }
        return banList;
    }
}
TOP

Related Classes of net.canarymod.backbone.BackboneBans

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.