/*
 * Licensed Materials - Property of Perforce Software, Inc. 
 * © Copyright Perforce Software, Inc. 2014, 2021 
 * © 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.editing;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import ilog.views.gantt.IlvActivity;
import ilog.views.gantt.IlvDuration;
import ilog.views.gantt.IlvHierarchyChart;
import ilog.views.gantt.faces.dhtml.component.IlvFacesGanttPropertyAccessor;

/**
 * Property accessor for the properties of Gantt model objects, as found in the
 * sample date file.
 */
public class PropertyAccessor extends IlvFacesGanttPropertyAccessor {
  /** List of the properties to hide from the client. */
  static List<String> hiddenProperties = Arrays
      .asList(new String[] { "earliestStart", "earliestFinish", "latestStart", "latestFinish", "totalSlack" });

  /**
   * Creates a <code>PropertyAccessor</code>.
   */
  public PropertyAccessor() {
    // Register the data type for the user-defined properties.
    registerType(IlvActivity.class, "totalSlack", IlvDuration.class);
    registerType(IlvActivity.class, "critical", Boolean.class);
    registerType(IlvActivity.class, "completion", Float.class);
    registerType(IlvActivity.class, "earliestStart", Date.class);
    registerType(IlvActivity.class, "earliestFinish", Date.class);
    registerType(IlvActivity.class, "latestStart", Date.class);
    registerType(IlvActivity.class, "latestFinish", Date.class);
  }

  /**
   * Returns the properties of an object, that will be exported for a hierachy
   * chart. The method is redefined to hide some user-defined properties from
   * the client.
   * 
   * @param view
   *          The <code>IlvHierarchyChart</code> to which the object belongs to.
   * @param object
   *          The Gantt model <code>Object</code> for which to return property
   *          names.
   * 
   * @return The names of the properties.
   */
  Override
  protected List<String> getPropertyNames(IlvHierarchyChart view, Object object) {
    List<String> allProperties = super.getPropertyNames(view, object);
    List<String> properties = new ArrayList<String>(allProperties);
    properties.removeAll(hiddenProperties);
    return properties;
  }
}