package org.geotoolkit.style.se;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Collections;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import static junit.framework.Assert.*;
import org.geotoolkit.factory.FactoryFinder;
import org.geotoolkit.sld.xml.Specification;
import org.geotoolkit.sld.xml.StyleXmlIO;
import org.geotoolkit.style.MutableStyle;
import org.geotoolkit.style.MutableStyleFactory;
import static org.geotoolkit.style.StyleConstants.*;
import org.junit.Test;
import org.opengis.filter.FilterFactory2;
import org.opengis.style.ExternalGraphic;
import org.opengis.style.Graphic;
import org.opengis.style.GraphicalSymbol;
import org.opengis.style.PointSymbolizer;
import org.opengis.style.Symbolizer;
import org.apache.sis.measure.Units;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class InlineImageTest extends org.geotoolkit.test.TestBase {
public static final FilterFactory2 FF = (FilterFactory2) FactoryFinder.getFilterFactory(null);
public static final MutableStyleFactory SF = (MutableStyleFactory)FactoryFinder.getStyleFactory(null);
@Test
public void readImage() throws Exception{
final BufferedImage image = new BufferedImage(20, 10, BufferedImage.TYPE_INT_ARGB);
final String geometry = null;
final ExternalGraphic external = SF.externalGraphic(new ImageIcon(image), Collections.EMPTY_LIST);
final Graphic graphic = SF.graphic(Collections.singletonList((GraphicalSymbol)external),
LITERAL_ONE_FLOAT, LITERAL_ONE_FLOAT, LITERAL_ONE_FLOAT, DEFAULT_ANCHOR_POINT, DEFAULT_DISPLACEMENT);
final PointSymbolizer ips = SF.pointSymbolizer("", geometry, DEFAULT_DESCRIPTION, Units.POINT, graphic);
final MutableStyle style = SF.style(ips);
final File f = File.createTempFile("sld", ".xml");
f.deleteOnExit();
final StyleXmlIO io = new StyleXmlIO();
io.writeStyle(f, style, Specification.StyledLayerDescriptor.V_1_1_0);
final MutableStyle result = io.readStyle(f, Specification.SymbologyEncoding.V_1_1_0);
final Symbolizer s = result.featureTypeStyles().get(0).rules().get(0).symbolizers().get(0);
assertTrue(s instanceof PointSymbolizer);
final PointSymbolizer ps = (PointSymbolizer) s;
final ExternalGraphic eg = (ExternalGraphic) ps.getGraphic().graphicalSymbols().get(0);
assertNotNull(eg);
final Icon ri = eg.getInlineContent();
assertNotNull(ri);
assertEquals(20,ri.getIconWidth());
assertEquals(10,ri.getIconHeight());
}
}