/*******************************************************************************
* Copyright (c) 2010 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.core.metadata.model;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.springframework.ide.eclipse.beans.core.model.IBean;
import org.springframework.ide.eclipse.beans.core.model.IBeanProperty;
import org.springframework.ide.eclipse.beans.core.model.IBeansConfig;
/**
* Extension point to be implemented if third parties want to contribute {@link IBeanMetadata} or {@link IBeanProperty}s
* to the Spring IDE core model.
* <p>
* Note: contributions made over this extension are <b>not</b> stored in the core model and will be terminated after
* <b>10</b> seconds.
* @author Christian Dupuis
* @since 2.0.5
*/
public interface IBeanMetadataProvider {
/**
* Contribute {@link IBeanMetadata} for a given {@link IBean} in the context of an {@link IBeansConfig}.
* <p>
* Note: implementations of this method are not allowed to return <code>null</code>.
* @param bean the current {@link IBean} to search for bean meta data
* @param beansConfig the current {@link IBeansConfig}
* @param progressMonitor a {@link IProgressMonitor} to report progress
* @return {@link Set} of {@link IBeanMetadata}
*/
Set<IBeanMetadata> provideBeanMetadata(IBean bean, IBeansConfig beansConfig, IProgressMonitor progressMonitor);
/**
* Contribute {@link IBeanProperty} for a given {@link IBean} in the context of an {@link IBeansConfig}.
* <p>
* Note: implementations of this method are not allowed to return <code>null</code>.
* @param bean the current {@link IBean} to search for bean meta data
* @param beansConfig the current {@link IBeansConfig}
* @param progressMonitor a {@link IProgressMonitor} to report progress
* @return {@link Set} of {@link IBeanProperty}
*/
Set<IBeanProperty> provideBeanProperties(IBean bean, IBeansConfig beansConfig, IProgressMonitor progressMonitor);
}