Skip to content

Commit

Permalink
Major change in convert module
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Jan 23, 2013
1 parent 200d4d3 commit 8813c83
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,4 @@ public Class<TARGETTYPE> getTargetType()
{
return targetType;
}

@Override
public boolean handles(Class<?> source, Class<?> target)
{
return getSourceType().isAssignableFrom(source) &&
getTargetType().isAssignableFrom(target);
}
}
16 changes: 6 additions & 10 deletions convert/api/src/main/java/org/jboss/forge/convert/Converter.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,17 @@

package org.jboss.forge.convert;

public interface Converter<S, T>
import org.jboss.forge.container.services.Exported;

@Exported
public interface Converter<SOURCE_TYPE, TARGET_TYPE>
{
/**
* Convert the source of type S to target type T.
* Convert the source of type SOURCE_TYPE to target type TARGET_TYPE.
*
* @param source the source object to convert, which must be an instance of S
* @return the converted object, which must be an instance of T
*/
T convert(S source);
TARGET_TYPE convert(SOURCE_TYPE source);

/**
* Checks if this converter is capable of handling files of this type
*
* @param source
* @return
*/
boolean handles(Class<?> source, Class<?> target);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,20 @@

package org.jboss.forge.convert;


/**
* Stores converter objects
*
* Creates {@link Converter} objects
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*
*/
public interface ConverterRegistry
public interface ConverterFactory
{
/**
* Returns a converter for the supplied source and target
*
*
* @param source
* @param target
* @return
*/
<S, T> Converter<S, T> getConverter(Class<S> source, Class<T> target);
<SOURCE, TARGET> Converter<SOURCE, TARGET> getConverter(Class<SOURCE> source, Class<TARGET> target);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.convert;

public interface ConverterGenerator
{
boolean handles(Class<?> source, Class<?> target);

Converter<?, ?> generateConverter();

Class<? extends Converter<?, ?>> getConverterType();
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,29 @@
import org.jboss.forge.container.services.Exported;
import org.jboss.forge.container.services.ExportedInstance;
import org.jboss.forge.convert.Converter;
import org.jboss.forge.convert.ConverterRegistry;
import org.jboss.forge.convert.ConverterFactory;
import org.jboss.forge.convert.ConverterGenerator;
import org.jboss.forge.convert.exception.ConverterNotFoundException;

@Exported
@Singleton
public class ConverterRegistryImpl implements ConverterRegistry
public class ConverterFactoryImpl implements ConverterFactory
{
@Inject
private AddonRegistry registry;

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
@SuppressWarnings({ "unchecked" })
public <S, T> Converter<S, T> getConverter(Class<S> source, Class<T> target)
{
Converter<S, T> result = null;
for (ExportedInstance<Converter> converterInstance : registry.getExportedInstances(Converter.class))
for (ExportedInstance<ConverterGenerator> generatorInstance : registry
.getExportedInstances(ConverterGenerator.class))
{
Converter<?, ?> converter = converterInstance.get();
if (converter.handles(source, target))
ConverterGenerator generator = generatorInstance.get();
if (generator.handles(source, target))
{
result = (Converter<S, T>) converter;
result = (Converter<S, T>) generator.generateConverter();
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
import javax.enterprise.inject.spi.InjectionPoint;

import org.jboss.forge.convert.Converter;
import org.jboss.forge.convert.ConverterRegistry;
import org.jboss.forge.convert.ConverterFactory;

public class ConverterProducer
{
@Produces
@SuppressWarnings("unchecked")
public <S, T> Converter<S, T> produceConverter(InjectionPoint injectionPoint, ConverterRegistry registry)
public <S, T> Converter<S, T> produceConverter(InjectionPoint injectionPoint, ConverterFactory registry)
{
Type type = injectionPoint.getAnnotated().getTypeClosure().iterator().next();
if (type instanceof ParameterizedType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.Addon;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.container.AddonDependency;
import org.jboss.forge.container.AddonId;
import org.jboss.forge.convert.Converter;
import org.jboss.forge.convert.impl.ConverterRegistryImpl;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -28,29 +28,19 @@
public class CDIConverterTest
{
@Deployment
@Dependencies(@Addon(name = "org.jboss.forge:convert", version = "2.0.0-SNAPSHOT"))
public static ForgeArchive getDeployment()
{
ForgeArchive archive = ShrinkWrap
.create(ForgeArchive.class)
.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"))
.addAsLibraries(
Maven.resolver().offline().loadPomFromFile("pom.xml").importRuntimeDependencies().asFile())
.addClass(CDIConverterTest.class)
.addAsAddonDependencies(
AddonDependency.create(AddonId.from("org.jboss.forge:convert", "2.0.0-SNAPSHOT")));

return archive;
}

@Deployment(testable = false, name = "org.jboss.forge:convert,2.0.0-SNAPSHOT")
public static ForgeArchive getUIDeployment()
{
ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class)
.addPackages(true, ConverterRegistryImpl.class.getPackage())
.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));

return archive;
}

@Inject
private Converter<String, Long> stringToLong;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import javax.inject.Inject;

import org.jboss.forge.container.services.Exported;
import org.jboss.forge.convert.BaseConverter;
import org.jboss.forge.resource.Resource;
import org.jboss.forge.resource.ResourceFactory;
Expand All @@ -22,7 +21,6 @@
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*/
@Exported
@SuppressWarnings("rawtypes")
public class ResourceConverter extends BaseConverter<Object, Resource>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.resource.converter;

import javax.annotation.Resource;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;

import org.jboss.forge.container.services.Exported;
import org.jboss.forge.convert.ConverterGenerator;

@Exported
public class ResourceConverterGenerator implements ConverterGenerator
{

@Inject
private Instance<ResourceConverter> converter;

@Override
public boolean handles(Class<?> source, Class<?> target)
{
return target == Resource.class;
}

@Override
public ResourceConverter generateConverter()
{
return converter.get();
}

@Override
public Class<ResourceConverter> getConverterType()
{
return ResourceConverter.class;
}
}

0 comments on commit 8813c83

Please sign in to comment.