/*
 * Copyright (c) 2011-2013, 2015 Eike Stepper (Berlin, Germany) and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eike Stepper - initial API and implementation
 */
package org.eclipse.net4j.util.ui;

import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.ui.IActionFilter;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.IPropertySourceProvider;

/**
 * @author Eike Stepper
 * @since 3.2
 */
public abstract class AbstractPropertyAdapterFactory implements IAdapterFactory
{
  private static final Class<IPropertySourceProvider> CLASS_IPROPERTYSOURCEPROVIDER = IPropertySourceProvider.class;

  private static final Class<IActionFilter> CLASS_IACTIONFILTER = IActionFilter.class;

  private static final Class<?>[] CLASSES = { CLASS_IPROPERTYSOURCEPROVIDER, CLASS_IACTIONFILTER };

  public AbstractPropertyAdapterFactory()
  {
  }

  public Class<?>[] getAdapterList()
  {
    return CLASSES;
  }

  @SuppressWarnings("unchecked")
  public <T> T getAdapter(Object adaptableObject, Class<T> adapterType)
  {
    if (adapterType == CLASS_IPROPERTYSOURCEPROVIDER)
    {
      final IPropertySource propertySource = createPropertySource(adaptableObject);
      if (propertySource != null)
      {
        return (T)new IPropertySourceProvider()
        {
          public IPropertySource getPropertySource(Object object)
          {
            return propertySource;
          }
        };
      }
    }

    if (adapterType == CLASS_IACTIONFILTER)
    {
      return (T)createActionFilter(adaptableObject);
    }

    return null;
  }

  protected abstract IPropertySource createPropertySource(Object object);

  /**
   * @since 3.4
   */
  protected IActionFilter createActionFilter(Object object)
  {
    return null;
  }
}
