accumulo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benjamin Parrish <benjamin.d.parr...@gmail.com>
Subject Setting authorizations in code
Date Mon, 23 Sep 2013 13:24:36 GMT
I am trying to set authorizations in code, but the scanner is always returning the previous
fetch of data using the previous authorizations.  I am setting the Authorizations on the Connector,
and then I get a new Scanner after setting the Authorizations.
	
	public Authorizations setAuthorizations(SecurityGroup[] authorizations) {
		List<byte[]> authorizationList = new ArrayList<byte[]>();
		
		for (SecurityGroup auth : authorizations) {
			String groupString = Security.getName(auth);
			
			byte[] groupBytes = groupString.getBytes();
			
			authorizationList.add(groupBytes);
		}
		
		Authorizations auths = new Authorizations(authorizationList);
		
		try {
			connector.securityOperations().changeUserAuthorizations(_loggedInUser, auths);
			
			return auths;
		} catch (AccumuloException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (AccumuloSecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}
	
	public Scanner getScanner() {
        	try {
        		Authorizations auths = this.getAuthorizations();
		    
			return connector.createScanner(TABLE, auths);
		} catch (TableNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        
        	return null;
	}
	
	@Override
	public Collection<Plate> filter(SecurityGroup[] authorizations, String regEx) {
		_db.setAuthorizations(authorizations);
		
		Scanner scanner = _db.getScanner();

		String valueRegex = (regEx.equals("")) ? ".*" : regEx + ".*";
        
		scanner.fetchColumn(Plate.COLUMN_FAMILY, new Text(Plate.PLATE_QUALIFIER));
        
		IteratorSetting iter = new IteratorSetting(1, "regexfilter", RegExFilter.class);
        
        	iter.addOption(RegExFilter.VALUE_REGEX, valueRegex);
        
        	scanner.addScanIterator(iter);
		
		Iterator<Entry<Key, Value>> it = scanner.iterator();
		
		Map<Text, Plate> map = new HashMap<Text, Plate>();
	    
	    	while (it.hasNext()) {
		    	Entry<Key,Value> entry = it.next();
		    
		    	Text rowId = entry.getKey().getRow();
		    
		    	if (map.containsKey(rowId)) {
		    		continue;
		    	}
		    
	    		Plate plate = new Plate(Plate.getMap(rowId, scanner));
		    
		    	map.put(rowId, plate);
	    	}
		
		return map.values();
	}
Mime
View raw message