Arquivo da tag: Java

Clonar objetos no Java

No Java o método clone() provê a criação de uma cópia similar ao objeto original. Em outras palavras o método copia campo a campo da classe clonada.
Para tornar uma classe clonável no Java são necessárias duas ações: implementar a interface “Cloneable” e sobrescrever o método clone(). É preciso ter em mente que ao clonar uma instância de uma classe os atributos primitivos (int, float, double, char, byte, etc…) são uma nova cópia do objeto original, já o atributo tipado (objeto de classe) acoplado terá por padrão copia da referencia original, ou seja, se mudamos o valor no atributo do objeto acoplado, todos que enxergam a mesma referencia serão afetado com a alteração.
Vamos ao primeiro exemplo de clonagem simples demonstrando a questão do atributo referenciado:
Classe Main

package mydelirium;
/**
 *
 * @author Ricardo Spinoza
 */
public class MyDelirium {

    /**
     * @param args the command line arguments
     * @throws java.lang.CloneNotSupportedException
     */
    public static void main(String[] args) throws CloneNotSupportedException{
        
        Dog dogOriginal = new Dog();        
        dogOriginal.setName("Ted");
        dogOriginal.setRace("Pitbull");
        
        Person personOriginal = new Person();
        personOriginal.setAge(24);
        personOriginal.setName("Jonnhy");
        personOriginal.setDogFriend(dogOriginal);
        
        Person personClone = (Person) personOriginal.clone();        
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());
        //System.out.println("orginal equals cloned: " + personOriginal.equals(personClone));
        
        System.out.println("Dog é uma referencia comum entre os dois objetos (original e clonado)? "
                + personOriginal.getDogFriend().equals(personClone.getDogFriend()));
        
        System.out.println();
        
        personOriginal.getDogFriend().setName("Xena");
        personOriginal.getDogFriend().setRace("Yourshire Terrier");
        personOriginal.setAge(33);
        
        System.out.println("Ou seja, ao mudar o objeto Dog teremos: \n");
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());                
    } 
}

Classe Person

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Person implements Cloneable{
    
    private int age;    
    private String name;
    
    private Dog dogFriend;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dog getDogFriend() {
        return dogFriend;
    }

    public void setDogFriend(Dog dogFriend) {
        this.dogFriend = dogFriend;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); 
    }
    
}

Classe Dog

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Dog{
 
    private String name;
    private String race;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }
}

A saída do código será:

<pre>original >> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
Dog é uma referencia comum entre os dois objetos (original e clonado)? true
Ou seja, ao mudar o objeto Dog teremos: 
original >> name: Jonnhy age:33 dog name:Xena dog race:Yourshire Terrier
cloned >>>> name: Jonnhy age:24 dog name:Xena dog race:Yourshire Terrier

No exemplo clonamos o objeto original que possui o atributo dogFriend (da classe Dog) o qual possui a mesma referencia nos objetos personOriginal e personClone. Observe que qualquer mudança de valor no atributo dogFriend o objeto original e clonado são afetados.
Para resolver o problema da referencia neste cenário precisaremos adicionar o método clone() na nossa classe Dog (obviamente implementar a interface Clonable) e alterar o método clone() definido na nossa classe Person para clonar o objeto Dog e assim isolar as referências de cada objeto.
Segue as mudanças no segundo exemplo:
Classe Main

package mydelirium;
/**
 *
 * @author Ricardo Spinoza
 */
public class MyDelirium {

    /**
     * @param args the command line arguments
     * @throws java.lang.CloneNotSupportedException
     */
    public static void main(String[] args) throws CloneNotSupportedException{
        
        Dog dogOriginal = new Dog();        
        dogOriginal.setName("Ted");
        dogOriginal.setRace("Pitbull");
        
        Person personOriginal = new Person();
        personOriginal.setAge(24);
        personOriginal.setName("Jonnhy");
        personOriginal.setDogFriend(dogOriginal);        
        Person personClone = (Person) personOriginal.clone();                
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());        
        System.out.println("Dog é uma referencia comum entre os dois objetos (original e clonado)? "
                + personOriginal.getDogFriend().equals(personClone.getDogFriend()));
        
        System.out.println();
        
        personOriginal.getDogFriend().setName("Xena");
        personOriginal.getDogFriend().setRace("Yourshire Terrier");
        personOriginal.setAge(33);
        
        System.out.println("Ao mudar o objeto Dog no objeto original teremos: \n");
        
        System.out.println("original >> name: " + personOriginal.getName() + " age:" +personOriginal.getAge()+ " dog name:" + personOriginal.getDogFriend().getName()+ " dog race:" + personOriginal.getDogFriend().getRace());
        System.out.println("cloned >>>> name: " + personClone.getName() + " age:" +personClone.getAge()+ " dog name:" + personClone.getDogFriend().getName()+ " dog race:" + personClone.getDogFriend().getRace());
                
    }
    
}

Classe Person

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Person implements Cloneable{
    
    private int age;    
    private String name;
    
    private Dog dogFriend;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Dog getDogFriend() {
        return dogFriend;
    }

    public void setDogFriend(Dog dogFriend) {
        this.dogFriend = dogFriend;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Person cloned = (Person)super.clone();
        //faz o clone do objeto dogFriend
        cloned.setDogFriend((Dog)cloned.getDogFriend().clone());
        return cloned;
    }
    
}

Classe Dog

package mydelirium;

/**
 *
 * @author Ricardo.Pereira
 */
public class Dog implements Cloneable{
 
    private String name;
    private String race;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRace() {
        return race;
    }

    public void setRace(String race) {
        this.race = race;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

A saída do código será:

original >> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull
Dog é uma referencia comum entre os dois objetos (original e clonado)? false

Ao mudar o objeto Dog no objeto original teremos: 

original >> name: Jonnhy age:33 dog name:Xena dog race:Yourshire Terrier
cloned >>>> name: Jonnhy age:24 dog name:Ted dog race:Pitbull

Por fim, a clonagem de objetos facilita criar cópias de objeto, porém é preciso ter alguns cuidados com relação a referencia de objetos tipados entre o objeto original e o clonado.

Dúvidas, criticas, sugestões, por favor escreva 🙂
Referencia:

API Java Object clone() http://http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#clone()
Leia mais em A guide to object cloning in java <http://howtodoinjava.com/2012/11/08/a-guide-to-object-cloning-in-java/&gt;

Anúncios

Deixe um comentário

Arquivado em Java

Java – metodo para remover caracteres de um string

/**
     * 
     * @brief Remove caracteres (charsRemove) da string de entrada.
     * 
     * @param str - string de entrada
     * @param charsRemove - string aonde deve ser informado os caracteres a ser removido da string de entrada.
     *  necessário definir um delimitador. exemplo: charsRemove="x;y;z" --> delimitador eh ";"
     * @param delimiter - string usada para separar os caracteres no split interno do método.
     * 
     * @author ricardo spinoza
     * @date 13/06/2012
     *   
     * @return string sem formatação  
     * */		
	public static String removeCaracteresFromString(String str, String charsRemove, String delimiter) {
		
			if (charsRemove!=null && charsRemove.length()>0 && str!=null) {
			
			String[] remover = charsRemove.split(delimiter);
			
			for(int i =0; i < remover.length ; i++) {
				//System.out.println("i: " + i + " ["+ remover[i]+"]");
				if (str.indexOf(remover[i]) != -1){
					str = str.replace(remover[i], "");
				}
			}
		}
		
	    return str;
	}

Exemplos de uso:

		//entrada 123/002-2
		//saida   123/0022
		System.out.println(removeCaracteresFromString("123/002-2", "-", ";"));
		
		//mudei o delimitador para pipe "x", note que no charsRemove tbem joguei o delimitador
		System.out.println(removeCaracteresFromString("666.123/002-2", ".x/x-", "x"));
		//entrada 666.123/002-2
		//saida  6661230022
		
		//remove os pontos da string
		System.out.println(removeCaracteresFromString("1.2.3/0.02-2", ".", ";"));
		//entrada 1.2.3/0.02-2
		//saida   123/002-2
		
		//remove as strings ".", "/" e "-" da string
		System.out.println(removeCaracteresFromString("123/002-2", ".;/;-", ";"));
		//entrada 123/002-2
		//saida   1230022

Acredito que com os exemplos de uso já dê sacar como o método funciona.
Sugestões de melhorias são bem vindas 🙂

T+

Deixe um comentário

Arquivado em Java, Utilidades

Exemplo de uso de HashMap

A classe HashMap é uma implementação da interface Map do pacote java.util, e possibilita trabalhar com mapeamento de objetos no esquema chave/valor, ou seja, informada a chave, resgato o valor.

Segue exemplo de uso:


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

//font: http://www.easywayserver.com/blog/java-map-example/

public class MapExample {

    public static void main(String[] args) {

        Map<Object,String> mp=new HashMap<Object, String>();

        // adding or set elements in Map by put method key and value pair
        mp.put(new Integer(2), "Two");
        mp.put(new Integer(1), "One");
        mp.put(new Integer(3), "Three");
        mp.put(new Integer(4), "Four");

        //Get Map in Set interface to get key and value
        Set s=mp.entrySet();

        //Move next key and value of Map by iterator
        Iterator it=s.iterator();

        while(it.hasNext())
        {
            // key=value separator this by Map.Entry to get key and value
            Map.Entry m =(Map.Entry)it.next();

            // getKey is used to get key of Map
            int key=(Integer)m.getKey();

            // getValue is used to get value of key in Map
            String value=(String)m.getValue();

            System.out.println("Key :"+key+"  Value :"+value);
        }
    }
}

Notas:
a classe HashMap não é sincronizada (perigoso em ambiente multi-threads) e não trabalha com ordenação dos elementos (Para map ordenado, veja TreeMap)

Deixe um comentário

Arquivado em Java

Java – Customizando formato de data com a classe SimpleDateFormat

Listagem com os formatos mais comuns para formatação de datas. A listagem completa pode ser conferida no javadoc da api

Format formatter;

// ano
formatter = new SimpleDateFormat("yy");    // 02
formatter = new SimpleDateFormat("yyyy");  // 2002

// mês
formatter = new SimpleDateFormat("M");     // 1
formatter = new SimpleDateFormat("MM");    // 01
formatter = new SimpleDateFormat("MMM");   // Jan
formatter = new SimpleDateFormat("MMMM");  // January

// dia
formatter = new SimpleDateFormat("d");     // 9
formatter = new SimpleDateFormat("dd");    // 09

// dia da semana
formatter = new SimpleDateFormat("E");     // Wed
formatter = new SimpleDateFormat("EEEE");  // Wednesday

// traz data de hoje
Date date = new Date();

// exemplos
formatter = new SimpleDateFormat("dd/MM/yyyy");
String s = formatter.format(date);
// 21/07/2011

formatter = new SimpleDateFormat("dd-MMM-yy");
s = formatter.format(date);
// 29-Jan-02

// exemplo com data e horário
formatter = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
s = formatter.format(date);
// 2002.01.29.08.36.33

formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");
s = formatter.format(date);
// Tue, 09 Jan 2002 22:14:02 -0500

Simples assim!!!

Referência:
Exemplos de uso: http://exampledepot.com/egs/java.text/FormatDate.html
JavaDoc da Api http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

1 comentário

Arquivado em Java

Java – Obtenha informações do sistema operacional, usuário e do Java do cliente facilmente com a API System Properties.

As informações do sistema operacional, usuário e particulariedades do Java do cliente podem ser acessadas com uso da API System Properties, mas especificamente o método System.getProperty(String chave) o qual trabalha com o conceito de chave-valor. Basta informar a chave (veja relação abaixo) na assinatura do método e obter o valor correspondente.  No final do post disponibilizei uma implementação dos uso das propriedades para ilustrar o uso da API :-).

Chave Significado
file.separator Character that separates components of a file path. This is “/” on UNIX and “\” on Windows.
java.io.tmpdir Default temp file path
java.home Installation directory for Java Runtime Environment (JRE)
java.class.version Java class format version number
java.class.path Path used to find directories and JAR archives containing class files. Elements of the class path are separated by a platform-specific character specified in the path.separator property.
java.home Java installation directory
java.specification.name Java Runtime Environment specification name
java.specification.vendor Java Runtime Environment specification vendor
java.specification.version Java Runtime Environment specification version
java.vendor Java Runtime Environment vendor
java.version Java Runtime Environment version
java.vendor.url Java vendor URL
java.vm.name Java Virtual Machine implementation name
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.version Java Virtual Machine implementation version
java.vm.specification.name Java Virtual Machine specification name
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.version Java Virtual Machine specification version
java.vendor JRE vendor name
java.vendor.url JRE vendor URL
java.version JRE version number
line.separator Line separator (“\n” on UNIX)
java.library.path List of paths to search when loading libraries
java.compiler Name of JIT compiler to use
os.arch Operating system architecture
os.name Operating system name
os.version Operating system version
java.ext.dirs Path of extension directory or directories
path.separator Path separator character used in java.class.path
line.separator Sequence used by operating system to separate lines in text files
user.name User account name
user.dir User’s current working directory
user.home User’s home directory
public class ExemploProperties {

	/**
	 * @param args
	 * @author Ricardo Spinoza
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("awt.toolkit="+System.getProperty("awt.toolkit"));
		System.out.println("file.encoding="+System.getProperty("file.encoding"));
		System.out.println("file.encoding.pkg="+System.getProperty("file.encoding.pkg"));
		System.out.println("file.separator="+System.getProperty("file.separator"));
		System.out.println("file.separator="+System.getProperty("file.separator"));
		System.out.println("java.awt.graphicsenv="+System.getProperty("java.awt.graphicsenv"));
		System.out.println("java.awt.printerjob="+System.getProperty("java.awt.printerjob"));
		System.out.println("java.class.path="+System.getProperty("java.class.path"));
		System.out.println("java.class.version="+System.getProperty("java.class.version"));
		System.out.println("java.endorsed.dirs="+System.getProperty("java.endorsed.dirs"));
		System.out.println("java.ext.dirs="+System.getProperty("java.ext.dirs"));
		System.out.println("java.home="+System.getProperty("java.home"));
		System.out.println("java.io.tmpdir="+System.getProperty("java.io.tmpdir"));
		System.out.println("java.library.path="+System.getProperty("java.library.path"));
		System.out.println("java.runtime.name="+System.getProperty("java.runtime.name"));
		System.out.println("java.runtime.version="+System.getProperty("java.runtime.version"));
		System.out.println("java.specification.name="+System.getProperty("java.specification.name"));
		System.out.println("java.specification.vendor="+System.getProperty("java.specification.vendor"));
		System.out.println("java.specification.version="+System.getProperty("java.specification.version"));
		System.out.println("java.vendor="+System.getProperty("java.vendor"));
		System.out.println("java.vendor="+System.getProperty("java.vendor"));
		System.out.println("java.vendor.url="+System.getProperty("java.vendor.url"));
		System.out.println("java.vendor.url="+System.getProperty("java.vendor.url"));
		System.out.println("java.vendor.url.bug="+System.getProperty("java.vendor.url.bug"));
		System.out.println("java.version="+System.getProperty("java.version"));
		System.out.println("java.version="+System.getProperty("java.version"));
		System.out.println("java.vm.info="+System.getProperty("java.vm.info"));
		System.out.println("java.vm.name="+System.getProperty("java.vm.name"));
		System.out.println("java.vm.specification.name="+System.getProperty("java.vm.specification.name"));
		System.out.println("java.vm.specification.vendor="+System.getProperty("java.vm.specification.vendor"));
		System.out.println("java.vm.specification.version="+System.getProperty("java.vm.specification.version"));
		System.out.println("java.vm.vendor="+System.getProperty("java.vm.vendor"));
		System.out.println("java.vm.version="+System.getProperty("java.vm.version"));
		System.out.println("line.separator="+System.getProperty("line.separator"));
		System.out.println("os.arch="+System.getProperty("os.arch"));
		System.out.println("os.arch="+System.getProperty("os.arch"));
		System.out.println("os.name="+System.getProperty("os.name"));
		System.out.println("os.version="+System.getProperty("os.version"));
		System.out.println("path.separator="+System.getProperty("path.separator"));
		System.out.println("path.separator="+System.getProperty("path.separator"));
		System.out.println("sun.arch.data.model="+System.getProperty("sun.arch.data.model"));
		System.out.println("sun.boot.class.path="+System.getProperty("sun.boot.class.path"));
		System.out.println("sun.boot.library.path="+System.getProperty("sun.boot.library.path"));
		System.out.println("sun.cpu.endian="+System.getProperty("sun.cpu.endian"));
		System.out.println("sun.cpu.isalist="+System.getProperty("sun.cpu.isalist"));
		System.out.println("sun.desktop="+System.getProperty("sun.desktop"));
		System.out.println("sun.io.unicode.encoding="+System.getProperty("sun.io.unicode.encoding"));
		System.out.println("sun.jnu.encoding="+System.getProperty("sun.jnu.encoding"));
		System.out.println("sun.management.compiler="+System.getProperty("sun.management.compiler"));
		System.out.println("sun.os.patch.level="+System.getProperty("sun.os.patch.level"));
		System.out.println("user.country="+System.getProperty("user.country"));
		System.out.println("user.dir="+System.getProperty("user.dir"));
		System.out.println("user.home="+System.getProperty("user.home"));
		System.out.println("user.language="+System.getProperty("user.language"));
		System.out.println("user.name="+System.getProperty("user.name"));
		System.out.println("user.timezone="+System.getProperty("user.timezone"));
		System.out.println("user.variant="+System.getProperty("user.variant"));
	}
}

O resultado do programa no meu ambiente:

awt.toolkit=sun.awt.windows.WToolkit
file.encoding=Cp1252
file.encoding.pkg=sun.io
file.separator=\
file.separator=\
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.awt.printerjob=sun.awt.windows.WPrinterJob
java.class.path=C:\Area51\projetosEclipse\workspace\test\bin;C:\Area51\projetosEclipse\workspace\test\jai_codec.jar;C:\Area51\projetosEclipse\workspace\test\jai_core.jar
java.class.version=50.0
java.endorsed.dirs=C:\Arquivos de programas\Java\jre6\lib\endorsed
java.ext.dirs=C:\Arquivos de programas\Java\jre6\lib\ext;C:\Windows\Sun\Java\lib\ext
java.home=C:\Arquivos de programas\Java\jre6
java.io.tmpdir=C:\Users\RICARD~1\AppData\Local\Temp\
java.library.path=C:\Arquivos de programas\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\Dell\DW WLAN Card;C:\Program Files\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files\Common Files\Roxio Shared\OEM\DLLShared\;C:\Program Files\Common Files\Roxio Shared\OEM\12.0\DLLShared\;C:\Program Files\Roxio\OEM\AudioCore\;C:\Program Files\Windows Live\Shared;C:\Program Files\Common Files\Roxio Shared\DLLShared\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.6.0_23\bin;C:\apache-maven-2.2.1\bin;C:\apache-tomcat\bin;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\OpenVPNTech\bin
java.runtime.name=Java(TM) SE Runtime Environment
java.runtime.version=1.6.0_23-b05
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.6
java.vendor=Sun Microsystems Inc.
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.6.0_23
java.version=1.6.0_23
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=19.0-b09
line.separator=
os.arch=x86
os.arch=x86
os.name=Windows 7
os.version=6.1
path.separator=;
path.separator=;
sun.arch.data.model=32
sun.boot.class.path=C:\Arquivos de programas\Java\jre6\lib\resources.jar;C:\Arquivos de programas\Java\jre6\lib\rt.jar;C:\Arquivos de programas\Java\jre6\lib\sunrsasign.jar;C:\Arquivos de programas\Java\jre6\lib\jsse.jar;C:\Arquivos de programas\Java\jre6\lib\jce.jar;C:\Arquivos de programas\Java\jre6\lib\charsets.jar;C:\Arquivos de programas\Java\jre6\lib\modules\jdk.boot.jar;C:\Arquivos de programas\Java\jre6\classes
sun.boot.library.path=C:\Arquivos de programas\Java\jre6\bin
sun.cpu.endian=little
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
sun.desktop=windows
sun.io.unicode.encoding=UnicodeLittle
sun.jnu.encoding=Cp1252
sun.management.compiler=HotSpot Client Compiler
sun.os.patch.level=
user.country=BR
user.dir=C:\Area51\projetosEclipse\workspace\test
user.home=C:\Users\ricardospinoza
user.language=pt
user.name=ricardospinoza
user.timezone=
user.variant=

Referências:

Deixe um comentário

Arquivado em Java

Wicket – Capturar resolução de tela dinamicamente.

Apache Wicket é uma framework para o desenvolvimento de aplicações Web para Java baseado em componentes. O Wicket abstrai o meio-de-campo entre o HTML e o Java. Bom, chega de bla bla bla…, vamos ao que interessa, que é o exemplo de como capturar a resolução de tela do cliente dinamicamente.
O objeto que representa as informações do cliente web é WebClientInfo (pacote org.apache.wicket.protocol.http.request.WebClientInfo) que servirá de base para armazenar a request com método de acesso getRequestCycle().getClientInfo(). Com objeto populado, basta acessar as properties e ler a largura com o metodo p.getScreenWidth() e altura com o metodo p.getScreenHeight().  Segue trecho do código:

WebClientInfo info = (WebClientInfo)getRequestCycle().getClientInfo();
ClientProperties p = info.getProperties();
int width = p.getScreenWidth();
int height = p.getScreenHeight();

No meu caso o objetivo era redimensionar uma modal no Wickit, fiz assim:

add(minhaModal = new ModalWindow("minhaModal"));
minhaModal.setPageMapName("minhaModal");
--definição da unidade utilizada,
neste caso em pixels
minhaModal.setHeightUnit("px");
minhaModal.setWidthUnit("px");

--definicão da altura
minhaModal.setInitialHeight(height);

--definição da largura
minhaModal.setInitialWidth(width);

minhaModal.setPageCreator(new ModalWindow.PageCreator() {

@Override
public Page createPage() {
return new MinhaClasseModal(Documento.this, minhaModal);
}
});

Importante: O Wicket precisa de liberação para obter informações do cliente. Para isto, adicione o método abaixo no seu init()

getRequestCycleSettings().setGatherExtendedBrowserInfo(true);

Referências:
Apache Wicket. http://pt.wikipedia.org/wiki/Apache_Wicket. acessado em 15/04/2011.
Exemplo de uso da Modal no Wicket. http://wicketstuff.org/wicket13/ajax/modal-window.1. acessado em 15/04/2011.

1 comentário

Arquivado em Frameworks, wicket

Regras para nomeação de propriedades JavaBeans

Regras para nomeação de propriedades Java Bean

Método getter

O método getter deve começar com “get”, se o atributo for booleano opcionalmente poderá iniciar com “is”, a continuação do nome deve seguir as regras de identificadores legais do Java. A assinatura do método deve ser public, não usar argumento(s) e ter tipo de retorno com afinidade ao tipo de argumento do método setter correspondente a propriedade.

Exemplos de nomes de propriedades getter JavaBeans validos:


getSize()

getNome()

isAcessoLiberado()

Método setter

O método setter deve começar com “set”, a continuação do nome deve seguir as regras de identificadores legais do Java.  A assinatura do método deve ser public e com tipo de retorno void e um argumento(s) que represente o tipo da propriedade. Exemplos de nomes de propriedades JavaBeans setter validos:


setSize(int size)

setNome(String nome)

setAcessoLiberado(boolean acesso)

Referência:
Guia de Estudo – Certificação Sun para Programador Java 6, Kathy Sierra, Bert Bates.

Deixe um comentário

Arquivado em Certificação, Java, SCPJ