Package ca.carleton.gcrc.couch.utils

Source Code of ca.carleton.gcrc.couch.utils.CouchNunaliitUtils

package ca.carleton.gcrc.couch.utils;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import org.json.JSONArray;
import org.json.JSONObject;

import ca.carleton.gcrc.couch.client.CouchAuthenticationContext;


public class CouchNunaliitUtils {

  static public void adjustDocumentForStorage(
      JSONObject doc
      ,CouchAuthenticationContext userContext
    ) throws Exception {
 
    long now = (new Date()).getTime();

    // nunaliit_created
    if( null != userContext ){
      JSONObject created = doc.optJSONObject(CouchNunaliitConstants.DOC_KEY_CREATED);
      if( null == created ) {
        created = new JSONObject();
        created.put("time", now);
        created.put(
          CouchNunaliitConstants.DOC_KEY_TYPE
          ,CouchNunaliitConstants.TYPE_ACTION_STAMP
          );
        created.put("name", userContext.getName());
        created.put("action", "created");
        doc.put(CouchNunaliitConstants.DOC_KEY_CREATED, created);
      }
    }

    // nunaliit_last_updated
    if( null != userContext ){
      JSONObject updated = new JSONObject();
      updated.put("time", now);
      updated.put(
        CouchNunaliitConstants.DOC_KEY_TYPE
        ,CouchNunaliitConstants.TYPE_ACTION_STAMP
        );
      updated.put("name", userContext.getName());
      updated.put("action", "updated");
      doc.put(CouchNunaliitConstants.DOC_KEY_LAST_UPDATED, updated);
    }
  }
 
  static public boolean hasAdministratorRole(CouchAuthenticationContext userContext, String atlasName){
    if( null == userContext ) {
      return false;
    }
   
    Collection<String> roles = userContext.getRoles();
    if( null == roles ) {
      return false;
    }
   
    // Figure out acceptable administrator roles
    Set<String> adminRoles = new HashSet<String>();
    adminRoles.add("_admin");
    adminRoles.add("administrator");
    if( null != atlasName ) {
      adminRoles.add(atlasName + "_administrator");
    }
   
    for(String role : roles){
      if( adminRoles.contains(role) ) {
        return true;
      }
    }
   
    return false;
  }
 
  static public boolean hasVetterRole(CouchAuthenticationContext userContext, String atlasName){
    if( null == userContext ) {
      return false;
    }
   
    Collection<String> roles = userContext.getRoles();
    if( null == roles ) {
      return false;
    }
   
    // Figure out acceptable vetter roles
    Set<String> vetterRoles = new HashSet<String>();
    vetterRoles.add("vetter");
    if( null != atlasName ) {
      vetterRoles.add(atlasName + "_vetter");
    }
   
    for(String role : roles){
      if( vetterRoles.contains(role) ) {
        return true;
      }
    }
   
    // Administrators are automatically vetters
    return hasAdministratorRole(userContext, atlasName);
  }
 
  static public List<JSONObject> findStructuresOfType(String type, JSONObject doc){
    List<JSONObject> structures = new Vector<JSONObject>();
   
    findStructuresOfType(doc, type, structures);
   
    return structures;
  }
 
  static private void findStructuresOfType(Object obj, String type, List<JSONObject> structures){
    if( obj instanceof JSONObject ){
      JSONObject jsonObj = (JSONObject)obj;
     
      String nunaliitType = jsonObj.optString("nunaliit_type");
      if( null != nunaliitType && nunaliitType.equals(type) ){
        structures.add(jsonObj);
      }
     
      // Iterate over children structures
      Iterator<?> it = jsonObj.keys();
      while( it.hasNext() ){
        Object keyObj = it.next();
        if( keyObj instanceof String ){
          String key = (String)keyObj;
          Object value = jsonObj.opt(key);
          if( null != value ){
            findStructuresOfType(value, type, structures);
          }
        }
      }
    } else if( obj instanceof JSONArray ) {
      JSONArray jsonArr = (JSONArray)obj;
     
      // Iterate over children values
      for(int i=0,e=jsonArr.length(); i<e; ++i){
        Object value = jsonArr.opt(i);
        if( null != value ){
          findStructuresOfType(value, type, structures);
        }
      };
    }
  }
}
TOP

Related Classes of ca.carleton.gcrc.couch.utils.CouchNunaliitUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.