00001 package cast.core;
00002
00003 import java.util.Hashtable;
00004
00005 import cast.cdl.WorkingMemoryPermissions;
00006
00007
00008 public class CASTComponentPermissionsMap {
00009
00010
00011 private static class PermAndCheck extends Pair<WorkingMemoryPermissions, Boolean> {
00012 PermAndCheck(WorkingMemoryPermissions _a, boolean _b) {
00013 super(_a, _b);
00014 }
00015 }
00016
00017 private final Hashtable<String, PermAndCheck> m_localPermissions;
00018 private final Hashtable<String, Hashtable<String, PermAndCheck>> m_globalPermissions;
00019
00020 public CASTComponentPermissionsMap(String _subarch) {
00021
00022 m_localPermissions = new Hashtable<String, PermAndCheck>();
00023 m_globalPermissions = new Hashtable<String, Hashtable<String,PermAndCheck>>();
00024
00025 m_globalPermissions.put(_subarch, m_localPermissions);
00026 }
00027
00028 public WorkingMemoryPermissions setPermissions(String _id, WorkingMemoryPermissions _permissions) {
00029 PermAndCheck check = m_localPermissions.put(_id, new PermAndCheck(_permissions,true));
00030 if(check == null) {
00031 return null;
00032 }
00033 else {
00034 return check.m_first;
00035 }
00036 }
00037
00038 public WorkingMemoryPermissions setPermissions(String _id, String _subarch, WorkingMemoryPermissions _permissions) {
00039 if(!m_globalPermissions.containsKey(_subarch)) {
00040 m_globalPermissions.put(_subarch, new Hashtable<String, PermAndCheck>());
00041 }
00042 PermAndCheck check = m_globalPermissions.get(_subarch).put(_id, new PermAndCheck(_permissions,true));
00043
00044 if(check == null) {
00045 return null;
00046 }
00047 else {
00048 return check.m_first;
00049 }
00050 }
00051
00052 public WorkingMemoryPermissions getPermissions(String _id) {
00053 return m_localPermissions.get(_id).m_first;
00054 }
00055
00056 public WorkingMemoryPermissions getPermissions(String _id, String _subarch) {
00057 if(!m_globalPermissions.containsKey(_subarch)) {
00058 return null;
00059 }
00060 PermAndCheck check = m_globalPermissions.get(_subarch).get(_id);
00061 if(check == null) {
00062 return null;
00063 }
00064 else {
00065 return check.m_first;
00066 }
00067
00068 }
00069
00070 public boolean hasPermissions(String _id) {
00071 return getPermissions(_id) != null;
00072 }
00073
00074 public boolean hasPermissions(String _id, String _subarch) {
00075 return getPermissions(_id, _subarch) != null;
00076 }
00077
00078 public WorkingMemoryPermissions removePermissions(String _id) {
00079 return m_localPermissions.remove(_id).m_first;
00080 }
00081
00082 public WorkingMemoryPermissions removePermissions(String _id, String _subarch) {
00083 if(!m_globalPermissions.containsKey(_subarch)) {
00084 return null;
00085 }
00086 return m_globalPermissions.get(_subarch).remove(_id).m_first;
00087 }
00088
00089
00090
00091
00092 public boolean needsConsistencyCheck(String _id) {
00093 return m_localPermissions.get(_id).m_second;
00094 }
00095
00096 public boolean needsConsistencyCheck(String _id, String _subarch) {
00097 if(!m_globalPermissions.containsKey(_subarch)) {
00098 return false;
00099 }
00100 return m_globalPermissions.get(_subarch).get(_id).m_second;
00101 }
00102
00103 public void consistencyChecked(String _id) {
00104 m_localPermissions.get(_id).m_second = false;
00105 }
00106
00107 public void consistencyChecked(String _id, String _subarch) {
00108 if(!m_globalPermissions.containsKey(_subarch)) {
00109 return ;
00110 }
00111 m_globalPermissions.get(_subarch).get(_id).m_second = false;
00112 }
00113
00114
00115
00116 }