Author: jcouteau Date: 2010-11-23 17:09:03 +0100 (Tue, 23 Nov 2010) New Revision: 505 Url: http://nuiton.org/repositories/revision/wikitty/505 Log: Fix getWikitty method on WikittyUtil, tests now passing Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyField.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-11-23 14:26:27 UTC (rev 504) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyUtil.java 2010-11-23 16:09:03 UTC (rev 505) @@ -25,11 +25,17 @@ package org.nuiton.wikitty; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; import org.nuiton.wikitty.entities.BusinessEntity; import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyField; import org.nuiton.wikitty.entities.WikittyImpl; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.BusinessEntityImpl; @@ -934,7 +940,7 @@ String securityToken, BusinessEntity entity) { - Wikitty result = null; + Wikitty result; if (entity instanceof BusinessEntityImpl) { result = ((BusinessEntityImpl) entity).getWikitty(); @@ -943,14 +949,33 @@ result = WikittyServiceEnhanced.restore(service, securityToken, id); + //try settings all fields except version try { - // FIXME poussin 20101122 this is completely false :( - // we can't use BeanUtils.copyProperties to copy to Wikitty - // there are no get or set method for field - BeanUtils.copyProperties(result, entity); + //get all fields + Class entityClass = entity.getClass(); + Field[] fields = entityClass.getDeclaredFields(); + + for(Field field:fields){ + //for each field that got WikittyField annotation + if (field.isAnnotationPresent(WikittyField.class)){ + + //get the attribute's wikitty fqn + WikittyField annotation = field.getAnnotation(WikittyField.class); + String fieldFQN = annotation.fqn(); + + //set the value + Method m = entityClass.getMethod("get" + StringUtils.capitalize(field.getName())); + Object value = m.invoke(entity); + + result.setFqField(fieldFQN, value); + } + } } catch (Exception eee) { throw new WikittyException("Could not transform entity to Wikitty", eee); } + + //manually set version + result.setVersion(entity.getWikittyVersion()); } return result; Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyField.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyField.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/entities/WikittyField.java 2010-11-23 16:09:03 UTC (rev 505) @@ -0,0 +1,25 @@ +package org.nuiton.wikitty.entities; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * + * Annotation to specify the wikitty field of a DTO field. Used for conversion + * between DTO and field + * + * User: couteau + * Date: 23 nov. 2010 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface WikittyField { + + /** + * @return the fully qualified name of the dto field in a wikitty + */ + String fqn(); + +} Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-11-23 14:26:27 UTC (rev 504) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/api/WikittyUtilTest.java 2010-11-23 16:09:03 UTC (rev 505) @@ -46,6 +46,7 @@ import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyField; import org.nuiton.wikitty.entities.WikittyLabel; import org.nuiton.wikitty.entities.WikittyLabelImpl; import org.nuiton.wikitty.entities.WikittyExtension; @@ -502,8 +503,8 @@ Assert.assertNotNull(date2); } - @Ignore - public void testGetWikitty() throws Exception { + @Test + public void testGetWikitty() { WikittyLabel label = new WikittyLabelImpl(); label.addLabels("Test"); @@ -537,6 +538,7 @@ protected String wikittyId; protected String wikittyVersion; + @WikittyField(fqn="WikittyLabel.labels") protected Set<String> labels = new HashSet<String>(); public void setWikittyId(String wikittyId) {