Package it.eng.spagobi.engines.qbe.template

Source Code of it.eng.spagobi.engines.qbe.template.QbeXMLModelAccessModality

/**
* SpagoBI - The Business Intelligence Free Platform
*
* Copyright (C) 2004 - 2008 Engineering Ingegneria Informatica S.p.A.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.

* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*
**/
package it.eng.spagobi.engines.qbe.template;


import it.eng.qbe.model.accessmodality.AbstractModelAccessModality;
import it.eng.qbe.model.structure.ModelEntity;
import it.eng.qbe.model.structure.IModelField;
import it.eng.qbe.query.Filter;
import it.eng.qbe.utility.StringUtils;
import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanException;
import it.eng.spagobi.commons.utilities.StringUtilities;
import it.eng.spagobi.utilities.exceptions.SpagoBIRuntimeException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.xml.sax.InputSource;


/**
* The Class DataMartModelAccessModality.
*
* @author Andrea Gioia
*/
public class QbeXMLModelAccessModality extends AbstractModelAccessModality {
 
 
  SourceBean modalitySB = null;
 
  Map entityAccessModalityMap = null;
  Boolean recursiveFiltering = null;
 

  /** The Constant TAG_MODALITIES. */
  private static final String TAG_MODALITIES = "MODALITIES";
 
 
  /** The Constant TAG_MODALITY. */
  private static final String TAG_MODALITY = "MODALITY";
 
  /** The Constant TAG_ENTITIES. */
  private static final String TAG_ENTITIES = "TABLES";
 
  /** The Constant TAG_ENTITY. */
  private static final String TAG_ENTITY = "TABLE";
 
  /** The Constant TAG_FIELDS. */
  private static final String TAG_FIELDS = "FIELDS";
 
  /** The Constant TAG_FIELD. */
  private static final String TAG_FIELD = "FIELD";
 
  /** The Constant TAG_FILTERS. */
  private static final String TAG_FILTERS = "FILTERS";
 
  /** The Constant TAG_FILTER. */
  private static final String TAG_FILTER = "FILTER";
 
 
  /** Logger component. */
    public static transient Logger logger = Logger.getLogger(QbeXMLModelAccessModality.class);
 
 
  public QbeXMLModelAccessModality() {}
 
 
 
 
  public QbeXMLModelAccessModality(File file) {
    String recursiveFilteringAttr;
    try {     
      modalitySB = SourceBean.fromXMLStream(
          new InputSource(new FileInputStream(file)));
      initRecursiveFiltering(modalitySB);
      entityAccessModalityMap = buildEntityAccessModalityMap(modalitySB);
    } catch (SourceBeanException e) {
      logger.error("Impossible to parse access modality properties from file " + file.toString()
          + ": \n" + e.toString());
    } catch (FileNotFoundException e) {
      logger.error("Impossible to load access modality properties from file " + file.toString()
          + ": \n" + e.toString());
    }
  }
 
  /**
   * Instantiates a new data mart model access modality.
   *
   * @param file the file
   * @param modalityName the modality name
   */
  public QbeXMLModelAccessModality(File file, String modalityName) {
    try {     
      SourceBean modalitiesSB = SourceBean.fromXMLStream(
          new InputSource(new FileInputStream(file)));
      modalitySB = getModalitySBByName(modalitiesSB, modalityName);
      initRecursiveFiltering(modalitySB);
      entityAccessModalityMap = buildEntityAccessModalityMap(modalitySB);
    } catch (SourceBeanException e) {
      logger.error(
          "Impossible to parse access modality properties from file " + file.toString()
          + ": \n" + e.toString());
    } catch (FileNotFoundException e) {
      logger.error(
          "Impossible to load access modality properties from file " + file.toString()
          + ": \n" + e.toString());
    }
  }
 
  /**
   * Instantiates a new data mart model access modality.
   *
   * @param modalitiesSB the modalities sb
   * @param modalityName the modality name
   */
  public QbeXMLModelAccessModality(SourceBean modalitiesSB, String modalityName) {
    modalitySB = getModalitySBByName(modalitiesSB, modalityName);
    initRecursiveFiltering(modalitySB);
    entityAccessModalityMap = buildEntityAccessModalityMap(modalitySB);
  }
 
  /**
   * Instantiates a new data mart model access modality.
   *
   * @param modalitySB the modality sb
   */
  public QbeXMLModelAccessModality(SourceBean modalitySB) {
    this.modalitySB = modalitySB;
    initRecursiveFiltering(modalitySB);
    entityAccessModalityMap = buildEntityAccessModalityMap(modalitySB);
  }
 
 
  private Boolean initRecursiveFiltering(SourceBean modalitySB) {
    String recursiveFilteringAttr;
   
    recursiveFilteringAttr = (String)modalitySB.getAttribute(ATTR_RECURSIVE_FILTERING);
    if(!StringUtilities.isEmpty(recursiveFilteringAttr)) {
      logger.debug("Attribute [" + ATTR_RECURSIVE_FILTERING + "] is equal to ["+ recursiveFilteringAttr + "]");
      if("disabled".equalsIgnoreCase(recursiveFilteringAttr)) {
        recursiveFiltering = Boolean.FALSE;
      } else {
        recursiveFiltering = Boolean.TRUE;
      }
      logger.debug("Recursive filtering enabled [" + recursiveFiltering + "]");
    }
   
    return recursiveFiltering;
  }
 
  /**
   * Gets the modality sb by name.
   *
   * @param modalitiesSB the modalities sb
   * @param modalityName the modality name
   *
   * @return the modality sb by name
   */
  private SourceBean getModalitySBByName(SourceBean modalitiesSB, String modalityName) {
    SourceBean modalitySB = null;
    if(modalityName != null) {
      modalitySB = (SourceBean)modalitiesSB.getFilteredSourceBeanAttribute(TAG_MODALITY, "name", modalityName)
        
    } else {
      List modalities = modalitySB.getAttributeAsList(TAG_MODALITY);
      if(modalities != null && modalities.size() > 0) {
        modalitySB = (SourceBean)modalities.get(0);
      }
    }
    return modalitySB;
  }
 
  /**
   * Builds the entity access modality map.
   *
   * @param modalitySB the modality sb
   *
   * @return the map
   */
  private Map buildEntityAccessModalityMap(SourceBean modalitySB) {
    Map map = new HashMap();
   
    List entities =  modalitySB.getAttributeAsList(TAG_ENTITY);
    SourceBean entitySB;
    EntityAccessModalitty entityAccessModality;
    for(int i = 0; i < entities.size(); i++) {
      entitySB = (SourceBean)entities.get(i);
      String entityName = (String)entitySB.getAttribute("name");
      String accessibleStr = (String)entitySB.getAttribute("accessible");
      boolean accessibleFlg = accessibleStr == null? true: accessibleStr.equalsIgnoreCase("TRUE");
      entityAccessModality = new EntityAccessModalitty(entityName, accessibleFlg);
     
      // get filed accessibility constraints
      List fields = entitySB.getAttributeAsList(TAG_FIELDS + "." + TAG_FIELD);
      SourceBean fieldSB;
      for(int j = 0; j < fields.size(); j++) {
        fieldSB = (SourceBean)fields.get(j);
        String fieldName = (String)fieldSB.getAttribute("name");
        String accesible = (String)fieldSB.getAttribute("accessible");
        if(accesible.equalsIgnoreCase("FALSE")) {
          entityAccessModality.setFieldUnaccessible(fieldName);
        }       
      }
      // get entity filter conditions
      List filters = entitySB.getAttributeAsList(TAG_FILTERS + "." + TAG_FILTER);
      SourceBean filterSB;
      for(int j = 0; j < filters.size(); j++) {
        filterSB = (SourceBean)filters.get(j);
        String filterCondition = filterSB.getCharacters();
        entityAccessModality.addFilterConditions(filterCondition);
               
      }
      map.put(entityAccessModality.getName(), entityAccessModality);
    }
   
    return map;
  }

 
  public boolean isEntityAccessible(ModelEntity entity) { 
   
    // ERROR: accessibility of entities is type based: ignore the role
    /*
    if(entityAccessModalityMap != null && entityAccessModalityMap.containsKey( entity.getUniqueType() )) {
      EntityAccessModalitty entityAccessModalitty = (EntityAccessModalitty)entityAccessModalityMap.get( entity.getUniqueType() );
      return entityAccessModalitty.isAccessible();
    }
    */
    if(entityAccessModalityMap != null && entityAccessModalityMap.containsKey( entity.getType() )) {
      EntityAccessModalitty entityAccessModalitty = (EntityAccessModalitty)entityAccessModalityMap.get( entity.getType() );
      return entityAccessModalitty.isAccessible();
    }
    return true;
  }
 
  /**
   * Checks if is field accessible.
   *
   * @param tableName the table name
   * @param fieldName the field name
   *
   * @return true, if is field accessible
   */
  public boolean isFieldAccessible( IModelField field ) {   
    if(entityAccessModalityMap != null && entityAccessModalityMap.containsKey( field.getParent().getType() )) {
      EntityAccessModalitty tableAccessModalitty = (EntityAccessModalitty)entityAccessModalityMap.get( field.getParent().getType() );
      return tableAccessModalitty.isFieldAccessible( field.getName() );
    }
    return true;
  }
 

  public List getEntityFilterConditions(String entityName) {
    if(entityAccessModalityMap != null && entityAccessModalityMap.containsKey(entityName)) {
      EntityAccessModalitty entityAccessModalitty = (EntityAccessModalitty)entityAccessModalityMap.get(entityName);
      return entityAccessModalitty.getFilterConditions();
    }
    return new ArrayList();
  }
 
 
  public List getEntityFilterConditions(String entityName, Properties parameters) {
    List newFilterConditions = new ArrayList();
    List filterConditions = getEntityFilterConditions(entityName);
    for(int i = 0; i < filterConditions.size(); i++) {
      String filterCondition = (String)filterConditions.get(i);
      try {
      filterCondition = StringUtils.replaceParameters(filterCondition, "P", parameters);
      } catch (Throwable t) {
        throw new SpagoBIRuntimeException("Impossible to replace parameters into filter condition [" + filterCondition +"]", t);
      }
      newFilterConditions.add(filterCondition);
    }
    return newFilterConditions;
  }
 
  public Boolean getRecursiveFiltering() {
    return recursiveFiltering;
  }

  public void setRecursiveFiltering(Boolean recursiveFiltering) {
    this.recursiveFiltering = recursiveFiltering;
  }
 
   
  /**
   * The Class EntityAccessModalitty.
   */
  public static class EntityAccessModalitty  {
   
    /** The name. */
    String name;
   
    /** The accessible. */
    boolean accessible;
   
    /** The fileds access modality map. */
    Map filedsAccessModalityMap;
   
    /** The filter conditions. */
    List filterConditions;
   
    /**
     * Instantiates a new entity access modalitty.
     *
     * @param tableName the table name
     * @param accessible the accessible
     */
    public EntityAccessModalitty(String tableName, boolean accessible) {
      this.name = tableName;
      this.accessible = accessible;
      filedsAccessModalityMap = new HashMap();
      filterConditions = new ArrayList();
    }
   
    /**
     * Sets the field unaccessible.
     *
     * @param fieldName the new field unaccessible
     */
    public void setFieldUnaccessible(String fieldName) {
      filedsAccessModalityMap.put(fieldName, "UNACCESSIBLE");
    }
   
    /**
     * Checks if is field accessible.
     *
     * @param fieldName the field name
     *
     * @return true, if is field accessible
     */
    public boolean isFieldAccessible(String fieldName) {
      boolean accessible = !filedsAccessModalityMap.containsKey(fieldName);
      return accessible;
    }

    /**
     * Gets the name.
     *
     * @return the name
     */
    public String getName() {
      return name;
    }

    /**
     * Checks if is accessible.
     *
     * @return true, if is accessible
     */
    public boolean isAccessible() {
      return accessible;
    }
   
    /**
     * Adds the filter conditions.
     *
     * @param condition the condition
     */
    public void addFilterConditions(String condition) {
      Filter filter = new Filter(name, condition);
      filterConditions.add(filter);
    }

    /**
     * Gets the filter conditions.
     *
     * @return the filter conditions
     */
    public List getFilterConditions() {
      return filterConditions;
    }
   
   
  }
}
TOP

Related Classes of it.eng.spagobi.engines.qbe.template.QbeXMLModelAccessModality

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.