001: package com.calipso.reportgenerator.reportmanager;
002:
003: import com.calipso.reportgenerator.common.InfoException;
004:
005: import java.util.*;
006: import java.io.*;
007:
008: import com.calipso.reportgenerator.common.LanguageTraslator;
009:
010: /**
011: *
012: * User: jbassino
013: * Date: 10/03/2005
014: * Time: 10:14:45
015: *
016: */
017: public class RolsRepository {
018: private HashMap roles;
019: private String repositoryPath;
020:
021: /**
022: * Crea una instancia de <code>UsersRepository</code>
023: * @param repositoryPath
024: */
025: public RolsRepository(String repositoryPath) throws InfoException {
026: this .repositoryPath = repositoryPath;
027: initialize(new File(repositoryPath));
028: }
029:
030: /**
031: * Llena un diccionario con los valores del repositorio
032: * en caso de que este ultimo exista
033: * @param repositoryFile
034: * @throws InfoException
035: */
036: private void initialize(File repositoryFile) throws InfoException {
037: if (repositoryFile.exists()) {
038: fillRolsMapFrom(repositoryFile);
039: }
040: }
041:
042: /**
043: * Llena un diccionario con los valores del repositorio.
044: * Cada entrada al diccionario contiene el nombre de rol
045: * mientras que a cada entrada le corresponden los nombres
046: * de los usuarios. Ej: rol1=usuario1
047: * rol1=usuario2
048: * rol2=usuario3
049: * @param repositoryFile
050: */
051: private void fillRolsMapFrom(File repositoryFile)
052: throws InfoException {
053: try {
054: FileReader fileReader = new FileReader(repositoryFile);
055: BufferedReader bufferedReader = new BufferedReader(
056: fileReader);
057: String line = bufferedReader.readLine();
058: roles = new HashMap();
059: while (line != null) {
060: if (!line.equals("")) {
061: StringTokenizer tokenizer = new StringTokenizer(
062: line, "=");
063: String user = tokenizer.nextToken();
064: String rol = tokenizer.nextToken();
065: if (roles.containsKey(rol)) {
066: Vector vec = ((Vector) roles.get(rol));
067: if (vec != null && !(vec.contains(user))) {
068: ((Vector) roles.get(rol)).add(user);
069: } else {
070: throw new InfoException(LanguageTraslator
071: .traslate("394"));
072:
073: }
074: } else {
075: Vector users = new Vector();
076: users.add(user);
077: roles.put(rol, users);
078: }
079: }
080: line = bufferedReader.readLine();
081: }
082: bufferedReader.close();
083: fileReader.close();
084: } catch (FileNotFoundException e) {
085:
086: } catch (IOException e) {
087:
088: }
089: }
090:
091: /**
092: * Comprueba si a un usuario le corresponde un rol.
093: * @param userName nombre de usuario
094: * @param rol a verificar
095: * @return boolean
096: */
097: public boolean validateRol(String userName, String rol) {
098: boolean returnVal = false;
099: if (getMap().containsKey(rol)) {
100: returnVal = ((Vector) getMap().get(rol)).contains(userName);
101: }
102: return returnVal;
103: }
104:
105: /**
106: * Devuelve los roles del repositorio
107: * @return mapa de relaciones entre roles y usuarios, por ej :
108: * "rol1->[codUsu1, codUsu2, codUsu3,...]"
109: */
110: public HashMap getMap() {
111: if (roles == null) {
112: roles = new HashMap();
113: }
114: return roles;
115: }
116:
117: /**
118: * Agrega una relación usuario/rol al mapa y
119: * actualiza el file rolsrepository
120: * (por ej si la relacion fuese: usu4= rol1 y el mapa
121: * tuviera en la clave "rol1", los elementos [usu1, usu2] , este
122: * quedaria de la forma rol1->[usu1, usu2,usu4] )
123: * @param user
124: * @param rol
125: * @throws InfoException
126: */
127: public void addUserRol(String user, String rol)
128: throws InfoException {
129: if (getMap().containsKey(rol)) {
130: Vector vec = ((Vector) getMap().get(rol));
131: if (vec != null && !(vec.contains(user))) {
132: ((Vector) getMap().get(rol)).add(user);
133: } else {
134: throw new InfoException(LanguageTraslator
135: .traslate("394"));
136: }
137: } else {
138: Vector users = new Vector();
139: users.add(user);
140: getMap().put(rol, users);
141: }
142: addToFile(user, rol);
143: }
144:
145: /**
146: * Actualiza el file rolsreporitory , con el mapa ya actualizado
147: * @param userName
148: * @param rol
149: * @throws InfoException
150: */
151: private void addToFile(String userName, String rol)
152: throws InfoException {
153: try {
154: File outputFile = new File(repositoryPath);
155: FileWriter fileWriter = null;
156: fileWriter = new FileWriter(outputFile.getPath(), true);
157: BufferedWriter bufferedWriter = new BufferedWriter(
158: fileWriter);
159: bufferedWriter.write(userName + "=" + rol + '\n');
160: bufferedWriter.close();
161: fileWriter.close();
162: } catch (IOException e) {
163: throw new InfoException(LanguageTraslator.traslate("571"),
164: e);
165: }
166: }
167:
168: /**
169: * Obtiene una lista con todos los roles que existen
170: * @return lista de roles
171: */
172: public List getRols() {
173: Iterator it = getMap().entrySet().iterator();
174: List allRols = new ArrayList();
175: while (it.hasNext()) {
176: Map.Entry e = (Map.Entry) it.next();
177: allRols.add(e.getKey());
178: }
179: return allRols;
180: }
181:
182: /**
183: * Elimina un usuario de la aplicacion del mapa con las relaciones
184: * roles/usuario y del file RolsRepository.
185: * @param us
186: */
187: public void removeUser(String us) throws InfoException {
188: removeUserToMap(us);
189: removeToFileRolsRepository();
190:
191: }
192:
193: /**
194: * Elimina un usuario del mapa de relaciones usuario-rol
195: * @param usId
196: */
197: private void removeUserToMap(String usId) {
198: Iterator it = getMap().entrySet().iterator();
199: while (it.hasNext()) {
200: Map.Entry e = (Map.Entry) it.next();
201: Vector vector = (Vector) e.getValue();
202: vector.remove(usId);
203: }
204: }
205:
206: /**
207: * Carga nuevamente el file rolsrepository,
208: * con los valores ya modificados en el mapa
209: */
210:
211: private void removeToFileRolsRepository() throws InfoException {
212: try {
213: Iterator it = getMap().entrySet().iterator();
214: File outputFile = new File(repositoryPath);
215: FileWriter fileWriter = null;
216: fileWriter = new FileWriter(outputFile.getPath());
217: BufferedWriter bufferedWriter = new BufferedWriter(
218: fileWriter);
219: while (it.hasNext()) {
220: Map.Entry list = (Map.Entry) it.next();
221: String idRol = (String) list.getKey();
222: Vector vector = (Vector) list.getValue();
223: for (int i = 0; i < vector.size(); i++) {
224: String s = (String) vector.elementAt(i);
225: bufferedWriter.write(s + "=" + idRol + '\n');
226: }
227: }
228: bufferedWriter.flush();
229: bufferedWriter.close();
230: fileWriter.close();
231: } catch (IOException e) {
232: throw new InfoException(LanguageTraslator.traslate("477"),
233: e);
234: }
235: }
236:
237: /**
238: * Elimina un rol de la aplicacion roles/usuario
239: * y del file RolsRepository.
240: * @param roleId
241: */
242: public void removeRol(String roleId) throws InfoException {
243: removeRolToMap(roleId);
244: removeToFileRolsRepository();
245: }
246:
247: /**
248: * Elimina un rol del mapa de relaciones usuario-rol
249: * @param roleId
250: */
251: private void removeRolToMap(String roleId) {
252: roles.remove(roleId);
253: }
254:
255: }
|