summaryrefslogtreecommitdiffstats
path: root/EssentialsGroupManager/src/org/anjocaido/groupmanager/data/DataUnit.java
blob: 7b027a94d46f48396baff5c0480280543a9f44ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.anjocaido.groupmanager.data;

import java.util.ArrayList;
import java.util.Collections;
import org.anjocaido.groupmanager.GroupManager;
import org.anjocaido.groupmanager.dataholder.WorldDataHolder;
import org.anjocaido.groupmanager.utils.StringPermissionComparator;

/**
 *
 * @author gabrielcouto
 */
public abstract class DataUnit {

    private WorldDataHolder dataSource;
    private String name;
    private boolean changed;
    private ArrayList<String> permissions = new ArrayList<String>();

    public DataUnit(WorldDataHolder dataSource, String name) {
        this.dataSource = dataSource;
        this.name = name;
    }

    /**
     * Every group is matched only by their names and DataSources names.
     * @param o
     * @return true if they are equal. false if not.
     */
    @Override
    public boolean equals(Object o) {
        if (o instanceof DataUnit) {
            DataUnit go = (DataUnit) o;
            if (this.getName().equalsIgnoreCase(go.getName()) && this.dataSource.getName().equalsIgnoreCase(go.getDataSource().getName())) {
                return true;
            }
        }
        return false;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 71 * hash + (this.name != null ? this.name.toLowerCase().hashCode() : 0);
        return hash;
    }

    /**
     * @return the dataSource
     */
    public WorldDataHolder getDataSource() {
        return dataSource;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    public void flagAsChanged() {
        GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as changed!");
// for(StackTraceElement st: Thread.currentThread().getStackTrace()){
// GroupManager.logger.finest(st.toString());
// }
        changed = true;
    }

    public boolean isChanged() {
        return changed;
    }

    public void flagAsSaved() {
        GroupManager.logger.finest("DataSource: " + getDataSource().getName() + " - DataUnit: " + getName() + " flagged as saved!");
        changed = false;
    }

    public boolean hasSamePermissionNode(String permission) {
        return permissions.contains(permission);
    }

    public void addPermission(String permission) {
        if (!hasSamePermissionNode(permission)) {
            permissions.add(permission);
        }
        flagAsChanged();
    }

    public boolean removePermission(String permission) {
        flagAsChanged();
        return permissions.remove(permission);
    }

    /**
     * Use this only to list permissions.
     * You can't edit the permissions using the returned ArrayList instance
     * @return a copy of the permission list
     */
    public ArrayList<String> getPermissionList() {
        return new ArrayList<String>(permissions);
    }

    public void sortPermissions() {
        Collections.sort(permissions, StringPermissionComparator.getInstance());
    }
}