Sunteți pe pagina 1din 9

Trabalho 02 Desenvolvimento de Sistemas

Professor: Augusto A. B. Branquinho. Data de Entrega: 28/05/2012 (NO SERO PERMITIDAS ENTREGAS APS A DATA). Valor: 8 Pontos N de Alunos: Individual

O trabalho consiste em implementar os mtodos do projeto java wpattern-trabalhodes-sis utilizando Reflection. Cada mtodo possui um comentrio com o comportamento esperado. O cdigo deste projeto est disponvel abaixo e pode ser baixado em:

Codificao do Projeto
ConcretClass.java

package br.com.wpattern.trabalho.dev.sis; import java.util.Date; import import import import br.com.wpattern.trabalho.dev.sis.annotation.WPatternClass; br.com.wpattern.trabalho.dev.sis.annotation.WPatternField; br.com.wpattern.trabalho.dev.sis.annotation.WPatternValue; br.com.wpattern.trabalho.dev.sis.beans.TestBean;

@WPatternClass(description="Concret class.") public class ConcretClass extends SuperClass<TestBean> { private int value12; @WPatternField(name="VALUE 13", required=false, values = { @WPatternValue(value="1"), @WPatternValue(value="2") }) private String value13; public Date value14; public double value15; public ConcretClass() { } private ConcretClass(String value01, Double value02, Integer value03, int value04, String value05, Date value06, Date value08) {

super(value01, value02, value03, value04, value05, value06, value08); } public static ConcretClass getInstance(String value01, Double value02, Integer value03, int value04, String value05, Date value06, Date value08) { return new ConcretClass(value01, value02, value03, value04, value05, value06, value08); } public int getValue12() { return this.value12; } public void setValue12(int value12) { this.value12 = value12; } public String getValue13() { return this.value13; } public void setValue13(String value13) { this.value13 = value13; } public Date getValue14() { return this.value14; } public void setValue14(Date value14) { this.value14 = value14; } public double getValue15() { return this.value15; } public void setValue15(double value15) { this.value15 = value15; } }

Main.java

package br.com.wpattern.trabalho.dev.sis; import br.com.wpattern.trabalho.dev.sis.beans.TestBean; public class Main { public static void main(String[] args) { TestBean bean01 = new TestBean(1, 10); TestBean bean02 = new TestBean(2, 20); TestBean bean03 = new TestBean(3, 30);

ConcretClass object01 = createInstance(ConcretClass.class); SampleClass object02 = createInstance(SampleClass.class); object01.addElement(bean01); object01.addElement(bean02); object01.addElement(bean03); // Relizar chamadas para cada um dos mtodos para os objetos "object01" e "object02". System.out.println(object01); System.out.println(object02); } private static <T> T createInstance(Class<T> classValue, Object[] ... parameters) { // Deve criar uma instncia da classe. return null; } private static void setFieldValue(Object objectInstance, String fieldName, Object value) { // Deve atribuir um valor para um determinado campo na instncia de um objeto. } private static void invokeMethod(String methodName, Object objectInstance, Object[] ... parameters) { // Invocar um mtodo de um objeto de acordo com o nome do mtodo e um grupo de parmetros. } private static void printClassAnnotation(Class<?> classType) { // Imprimir qual anotao est em uma classe e os respectivos parmetros desta anotao e os valores // que esto para esta class. } private static void printFieldAnnotation(Class<?> classType) { // Imprimir qual(is) anotao(s) est(o) para cada campo de uma classe e os respectivos parmetros // desta anotao e os valores que esto para este campo. } private static void printMethods(Class<?> classValue) { // Imprimir todos os mtodos. } private static void printConstructors(Class<?> classValue) { // Imprimir todos os contrutores. } private static void printPublicFields(Object objectInstance) { // Imprimir todos os campos pblicos, colocando o nome do campo e o seu respectivo valor. } private static void printGenericType(Object objectInstance) {

// Imprimir o tipo genrico da instncia de um objeto. } private static void printAllFields(Object objectInstance) { // Imprimir todos os campos pblicos, colocando o nome do campo e o seu respectivo valor. } private static void printSuperClassClassAnnotation(Class<?> classType) { // Imprimir qual anotao est em uma classe e os respectivos parmetros desta anotao e os valores // que esto para esta class. Devem ser consideradas as super classes. } private static void printSuperClassFieldAnnotation(Class<?> classType) { // Imprimir qual(is) anotao(s) est(o) para cada campo de uma classe e os respectivos parmetros // desta anotao e os valores que esto para este campo. Devem ser consideradas as super classes. } private static void printSuperClassPublicFields(Object objectInstance) { // Imprimir todos os campos pblicos, incluindo as super classes, colocando o nome do campo e o seu respectivo valor. } private static void printSuperClassAllFields(Object objectInstance) { // Imprimir todos os campos pblicos, incluindo as super classes, colocando o nome do campo e o seu respectivo valor. } private static void printSuperClassMethods(Class<?> classValue) { // Imprimir todos os mtodos, incluindo as super classes. } private static void printSuperClassConstructors(Class<?> classValue) { // Imprimir todos os contrutores, incluindo as super classes. } private static void printSuperClassGenericType(Object objectInstance) { // Imprimir o tipo genrico da instncia de um objeto, incluindo as super classes. } }

SampleClass.java

package br.com.wpattern.trabalho.dev.sis; public class SampleClass {

private int value01; public String value02; public SampleClass() { } public int getValue01() { return this.value01; } public void setValue01(int value01) { this.value01 = value01; }

SuperClass.java

package br.com.wpattern.trabalho.dev.sis; import import import import import import import import import java.util.ArrayList; java.util.Date; java.util.List; java.util.Queue; java.util.concurrent.LinkedBlockingQueue; br.com.wpattern.trabalho.dev.sis.annotation.WPatternClass; br.com.wpattern.trabalho.dev.sis.annotation.WPatternField; br.com.wpattern.trabalho.dev.sis.annotation.WPatternValue; br.com.wpattern.trabalho.dev.sis.interfaces.ISuperClass;

@WPatternClass(description="Super class.") public class SuperClass<T> implements ISuperClass { @WPatternField(name="Value 01") private String value01; private Double value02; public Integer value03; public int value04; public final String value05; @WPatternField(name="Value 06", required=false) public final Date value06; private static final String value07 = "Value 07"; private Date value08; @WPatternField(name="Value 09", values = @WPatternValue(value = "Default value"))

private List<Date> value09; private List<Integer> value10; private Queue<T> value11; public SuperClass() { this.value05 = null; this.value06 = null; this.value09 = new ArrayList<Date>(); this.value10 = new ArrayList<Integer>(); this.value11 = new LinkedBlockingQueue<T>(); } public SuperClass(String value01, Double value02, Integer value03, int value04, String value05, Date value06, Date value08) { this.value01 = value01; this.value02 = value02; this.value03 = value03; this.value04 = value04; this.value05 = value05; this.value06 = value06; this.value08 = value08; this.value09 = new ArrayList<Date>(); this.value10 = new ArrayList<Integer>(); this.value11 = new LinkedBlockingQueue<T>(); } public void addDate(Date date) { this.value09.add(date); } public void addInteger(int value) { this.value10.add(value); } public void addElement(T element) { this.value11.add(element); } public String getValue01() { return this.value01; } public void setValue01(String value01) { this.value01 = value01; } public Double getValue02() { return this.value02; } public void setValue02(Double value02) { this.value02 = value02; } public static String getValue07() { return value07; }

public Date getValue08() { return this.value08; } public void setValue08(Date value08) { this.value08 = value08; } private List<Integer> getIntegerList() { return this.value10; } @Override public int sum() { int sum = 0; for (int value : this.getIntegerList()) { sum += value; } return (int) (sum + this.value02 + this.value03 + this.value04); } @Override public String toString() { return "SampleClass01 [value01=" + this.value01 + ", value02=" + this.value02 + ", value03=" + this.value03 + ", value04=" + this.value04 + ", value05=" + this.value05 + ", value06=" + this.value06 + ", value08=" + this.value08 + ", dateList=" + this.value09 + ", integerList=" + this.value10 + ", queue=" + this.value11 + "]"; } }

BaseBean.java

package br.com.wpattern.trabalho.dev.sis.beans; import java.io.Serializable; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; public abstract class BaseBean implements Serializable { private static final long serialVersionUID = -7015461569803621288L; @Override public String toString() {

return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } }

TestBean.java

package br.com.wpattern.trabalho.dev.sis.beans; public class TestBean extends BaseBean { private static final long serialVersionUID = 6268437424009360709L; private int value01; private int value02; public TestBean(int value01, int value02) { } public int getValue01() { return this.value01; } public int getValue02() { return this.value02; } }

ISuperClass.java
package br.com.wpattern.trabalho.dev.sis.interfaces; public interface ISuperClass { public int sum(); }

WPatternValue.java
package br.com.wpattern.trabalho.dev.sis.annotation; import import import import java.lang.annotation.Documented; java.lang.annotation.ElementType; java.lang.annotation.Retention; java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface WPatternValue { String value(); }

WPatternField.java
package br.com.wpattern.trabalho.dev.sis.annotation; import import import import import java.lang.annotation.Documented; java.lang.annotation.ElementType; java.lang.annotation.Retention; java.lang.annotation.RetentionPolicy; java.lang.annotation.Target;

@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface WPatternField { String name(); boolean required() default true; WPatternValue[] values() default { }; }

WPatternClass.java
package br.com.wpattern.trabalho.dev.sis.annotation; import import import import import java.lang.annotation.Documented; java.lang.annotation.ElementType; java.lang.annotation.Retention; java.lang.annotation.RetentionPolicy; java.lang.annotation.Target;

@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface WPatternClass { String description() default ""; }

S-ar putea să vă placă și