/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */
package demo;

import ilog.views.util.servlet.tiling.IlvFileTileManager;
import ilog.views.util.servlet.tiling.IlvTileManager;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletContext;
/**
 * Server side bean used to store the Diagrammer project url.
 */
public class ProjectBean {
  private IlvFileTileManager tileManager;
  private String project;
  /**
   * Returns the current project.
   * 
   * @return the current project.
   */
  public String getProject() {
    return project;
  }
  /**
   * Sets the diagrammer project url.
   * 
   * @param project
   *          the diagrammer project url.
   */
  public void setProject(String project) {
    this.project = project;
    tileManager = null;
  }
  /**
   * Returns true if the project model is editable.
   * 
   * @return true if the project model is editable.
   */
  public boolean isEditable() {
    return project != null && project.endsWith(".idpr"); //$NON-NLS-1$
  }
  /**
   * Returns true if the bean has no project loaded .
   * 
   * @return true if the bean has no project loaded .
   */
  public boolean isNoProjectLoaded() {
    return project == null || "null".equals(project); //$NON-NLS-1$ used to set a null project in the jsp
  }
  /**
   * JSF Action listener that clears server cache.
   * @param event ignored parameter.
   */
  public void clearServerCache(ActionEvent event) {
    if(event==null){
      // unused
    }
    File root=getCacheRootDirectory();
    if(root!=null&&root.isDirectory()){
      // Clearing Server Tile Cache in memory
      if(tileManager!=null && tileManager.getCache()!=null){
        tileManager.getCache().clear();
      }
      // Clearing Server Tile Cache from other (previous) calls
      File cache2[]=root.listFiles();
      for(int i=0;i<cache2.length;i++){
        try {
          cache2[i].delete();
        } catch (SecurityException e){
          e.printStackTrace();
        }
      }
      cache2=null;
    }
  }
  private File getCacheRootDirectory() 
  {
    FacesContext fc = FacesContext.getCurrentInstance();
    if(fc!=null) {
    Object o = fc.getExternalContext().getContext();
    if(o instanceof ServletContext && project!=null) {
      ServletContext context = (ServletContext)o;
      File tmpdir = (File)context.getAttribute("javax.servlet.context.tempdir"); //$NON-NLS-1$
      if(tmpdir == null) {
        tmpdir = new File(System.getProperty("java.io.tmpdir")); //$NON-NLS-1$
      }

      //encoding directory name 
      //JV-3550 
      String encodedName = null;
      try {
        encodedName = URLEncoder.encode(context.getServletContextName(), "UTF-8");//$NON-NLS-1$
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      return new File(tmpdir, encodedName+project); 
    }
    }
    return null;
  }
  /** Returns the tile manager that stores data on the server cache.
   * @return the tile manager that stores data on the server cache.
   */
  public IlvTileManager getTileManager() {
    if(tileManager == null) {
      File root=getCacheRootDirectory();
      if(root!=null) {
        tileManager = new IlvFileTileManager(root , 1024 * 1024 * 5, 1024 * 1024);
      }
    }
    return tileManager;
  }

}