Agora daremos sequencia no tutorial, lembrando que no passo 1 criamos a classe MyFormatFeatureResponseDelegate.java.

PASSO 2: Criando a classe MyFormatFeatureResponseDelegateFactory.java

No pacote org.vfny.geoserver.wfs.responses, crie sua classe MyFormatFeatureResponseDelegateProducer.java, ela deve implementar a interface FeatureResponseDelegateProducerSpi:

[source language=”:Java”]
public interface FeatureResponseDelegateProducerSpi
extends Factory
{
String getName();

Set getSupportedFormats();

boolean isAvailable();

boolean canProduce(String format);

FeatureResponseDelegate
createFeatureDelegateProducer(String format)
throws IllegalArgumentException;
[/source]

Crie também um atributo estático do tipo java.util.HashSet. Nele, armazene os tipos possíveis que esta factory permite. Esta aqui um exemplo do GML2FeatureResponseDelegateFactory:

[source language=”:Java”]
static HashSet supportedFormats = new HashSet();

static{
supportedFormats.add("GML2");
supportedFormats.add("GML2-GZIP");
}
[/source]

O método getName(), retorna o nome da instância da factory. No ShapefileFeatureResponseDelegateFactory é assim por exemplo:

[source language=”:Java”]
public String getName() {
return "Shapefile Output
(compressed in a zip file)";
}
[/source]

O método getSupportedFormats(), retorna todos os tipos de saídas suportados. Basta fazer conforme o código abaixo:

[source language=”:Java”]
public Set getSupportedFormats()
{
return supportedFormats;
}
[/source]

O método isAvailable() determina quando o factory pode criar novas instâncias. Nas classes ShapefileFeatureResponseDelegateFactory e GML2FeatureResponseDelegateFactory o retorno é simplesmente verdadeiro(true).

Já o método canProduce(String format), retorna true se o factory pode criar o formato de saída especificado. Ele tem a mesma função do canProduce() da classe MyFormatFeatureResponseDelegate.

Este método criará um nvo MyFormatFeatureResponseDelegate. Deve verificar para ver se o formato puder ser criado, e então criará o objeto. É aqui o que o método GML2FeatureResponseDelegateFactory:

[source language=”:Java”]
public FeatureResponseDelegate
createFeatureDelegateProducer(String format)
throws IllegalArgumentException
{
if (canProduce(format))
return new GML2FeatureResponseDelegate();
throw new IllegalArgumentException("cannot
produce "+format);
}
[/source]

Fonte: GeoServer