/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.studio.tables.grid;
import java.util.Arrays;
import com.opendoorlogistics.api.tables.ODLTableDefinition;
import com.opendoorlogistics.api.tables.TableFlags;
final public class GridEditPermissions {
public enum Permission{
setValues,
createRows,
deleteRows,
moveRows,
alterStructure
}
private boolean [] permissions = new boolean[Permission.values().length];
// private boolean setValues;
// private boolean createRows;
// private boolean deleteRows;
// private boolean moveRows;
// private boolean alterStructure;
public GridEditPermissions(boolean setValues, boolean createRows,boolean deleteRows,boolean moveRows, boolean alterStructure) {
set(Permission.setValues, setValues);
set(Permission.createRows , createRows);
set(Permission.deleteRows ,deleteRows);
set(Permission.alterStructure ,alterStructure);
set(Permission.moveRows ,moveRows);
}
/**
* No-permissions constructor
*/
public GridEditPermissions(){}
public void set(Permission permission, boolean value){
permissions[permission.ordinal()]=value;
}
public boolean get(Permission permission){
return permissions[permission.ordinal()];
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(permissions);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
GridEditPermissions other = (GridEditPermissions) obj;
if (!Arrays.equals(permissions, other.permissions))
return false;
return true;
}
public static GridEditPermissions create(ODLTableDefinition table, boolean alterableStructure){
final long flags = table.getFlags();
class Helper {
boolean hasFlag(long flag) {
return (flags & flag) == flag;
}
}
Helper hlp = new Helper();
return new GridEditPermissions(hlp.hasFlag(TableFlags.UI_SET_ALLOWED), hlp.hasFlag(TableFlags.UI_INSERT_ALLOWED), hlp
.hasFlag(TableFlags.UI_DELETE_ALLOWED), hlp.hasFlag(TableFlags.UI_MOVE_ALLOWED), alterableStructure);
}
public static GridEditPermissions and(GridEditPermissions a, GridEditPermissions b){
GridEditPermissions ret = new GridEditPermissions();
for(int i =0 ; i<ret.permissions.length;i++){
ret.permissions[i] = a.permissions[i] & b.permissions[i];
}
return ret;
}
}