/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2010, Johann Sorel
*
* 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;
* version 2.1 of the License.
*
* 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.
*/
package org.geotoolkit.gui.swing.render2d.control.information.presenter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.imageio.spi.ServiceRegistry;
import javax.swing.JComponent;
import org.apache.sis.internal.util.UnmodifiableArrayList;
import org.geotoolkit.display2d.canvas.RenderingContext2D;
import org.geotoolkit.display2d.primitive.SearchAreaJ2D;
/**
* Merge available presenter registered in META-INF services
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class DefaultInformationPresenter extends AbstractInformationPresenter{
private static final List<InformationPresenter> PRESENTERS;
static {
final Iterator<InformationPresenter> ite = ServiceRegistry.lookupProviders(InformationPresenter.class);
final List<InformationPresenter> presenters = new ArrayList<InformationPresenter>();
while(ite.hasNext()){
presenters.add(ite.next());
}
Collections.sort(presenters);
Collections.reverse(presenters);
PRESENTERS = UnmodifiableArrayList.wrap(presenters.toArray(new InformationPresenter[presenters.size()]));
}
public DefaultInformationPresenter() {
super(0);
}
/**
* Create a user interface component to display the given object.
* @param candidate , object to display
* @return JComponent or null if no component appropriate.
*/
@Override
public JComponent createComponent(final Object graphic, final RenderingContext2D context, final SearchAreaJ2D area){
for(InformationPresenter presenter : PRESENTERS){
final JComponent comp = presenter.createComponent(graphic, context, area);
if(comp != null){
return comp;
}
}
return null;
}
}