ArrayCollection XML FileReference Flex

7, abril, 2011 3 comentários

Opa.

Resolvi criar este post pois ja havia feito isso para trabalho de faculdade, então, compratilhando o conhecimento adquirido.

Segue abaixo aplicação e os fonte com as explicações:
Clique em Listar e depois salvar.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	backgroundColor="white">
 
	<mx:Script>
		<![CDATA[
			import mx.rpc.xml.SimpleXMLEncoder;
			import mx.utils.ObjectUtil;
			import mx.controls.Alert;
			import mx.collections.ArrayCollection;
 
			private var fr:FileReference;
			private static const FILE_TYPES:Array=[new FileFilter("Arquivo XML", "*.xml")];
			private static const DEFAULT_FILE_NAME:String="trabalho.xml";			
			[Bindable]
			public var arr:ArrayCollection=new ArrayCollection(
					[{id:1, nome:"Felipe Borella", cidade:"Marau"},
					{id:2, nome:"Mario Junior", cidade:"Rio de Janeiro"},
					{id:3, nome:"Bãrdei Futebol Clube", cidade:"Marau"},
					{id:4, nome:"Janderson Futebol Clube", cidade:"Rio de Janeiro"}]);
 
			private function iniciar():void
			{
				var xml:XML=objectToXML(arr.source);
				txt1.text=ObjectUtil.toString(arr.source);
				txt2.text=xml.toXMLString();
			}
 
 
			private function objectToXML(obj:Object):XML
			{	
				var qName:QName=new QName("pessoa");
				var xmlDocument:XMLDocument=new XMLDocument();
				var simpleXMLEncoder:SimpleXMLEncoder=new SimpleXMLEncoder(xmlDocument);
				var xmlNode:XMLNode=simpleXMLEncoder.encodeValue(obj, qName, xmlDocument);
				var xml:XML=new XML(xmlDocument.toString());
				trace(xml.toXMLString());
				return xml;
			}
 
			private function onLoadFileClick():void
			{
				//cria a instancia do FileReference
				fr=new FileReference();
				//adiciona o evento para a escuta quando o arquivo for selecionado 
				fr.addEventListener(Event.SELECT, onFileSelect);
				//adiciona o evento para a escuta quando o arquivo for cancelado
				fr.addEventListener(Event.CANCEL, onCancel);
				//abri somente arquivos XML
				fr.browse(FILE_TYPES);
			}
 
			//chamado quando o usuario seleciona o arquivo
			private function onFileSelect(e:Event):void
			{
				//quando o arquivo for carregado dispara a escuta da funcao onLoadComplete
				fr.addEventListener(Event.COMPLETE, onLoadComplete);
				// adiciona a escuta quando acontece erro ao carregar arquivo
				fr.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
				//carrega o conteudo do arquivo
				fr.load();
			}
 
			//Chamado quando o usuario cancela
			private function onCancel(e:Event):void
			{
				trace("File Browse Canceled");
				fr=null;
			}
 
			//chama completa o arquivo carregado
			private function onLoadComplete(e:Event):void
			{
				//recupera os dados do arquivo como um byte array
				var data:ByteArray=fr.data;
				//le o arquivo como uma string e coloca em um text area
				txt2.text=data.readUTFBytes(data.bytesAvailable);
				//limpa a instancia do arquivo tipo filereference
				fr=null;
			}
 
			//quando ocorrer erros ao carregar
			private function onLoadError(e:IOErrorEvent):void
			{
				trace("Error loading file : " + e.text);
			}
 
			//chamadoquando o usuario digita no textarea
			private function onInputChange():void
			{
				//habilita o botao se ha texto para salvar
				saveButton.enabled=(txt2.text.length > 0);
			}
 
			//chamado quando o usuario clica o botao de carregar
			private function onSaveClick():void
			{
				//criando instancia de File Reference
				fr=new FileReference();
 
				//escuta para falha quando foi salvo
				fr.addEventListener(Event.COMPLETE, onFileSave);
 
				//escuta  para quando cancelar
				fr.addEventListener(Event.CANCEL, onCancel);
 
				//escuta para quando ha erros no salvar
				fr.addEventListener(IOErrorEvent.IO_ERROR, onSaveError);
 
				//abre a caixa para saber onde salvar o XML usando o nome default
				fr.save('<?xml version="1.0" encoding="UTF-8"?>\n'+txt2.text, DEFAULT_FILE_NAME);
			}
 
			//chamado quando o arquivo for salvo
			private function onFileSave(e:Event):void
			{
				trace("File Saved");
				fr=null;
				Alert.show('Salvo com sucesso');
			}
 
			//chamado se o usuario cancela a caixa de dialogo
			private function onCance2l(e:Event):void
			{
				Alert.show('Arquivo cancelado', 'Sistema');
				fr=null;
			}
 
			//chamado se ocorrer erro enquanto salva o arquivo
			private function onSaveError(e:IOErrorEvent):void
			{
				Alert.show('Erro '+ e.text);
				fr=null;
			}					
		]]>
	</mx:Script>
 
	<mx:DataGrid x="10" y="10" dataProvider="{arr}" width="299">
		<mx:columns>
			<mx:DataGridColumn headerText="Nome" dataField="nome"/>
			<mx:DataGridColumn headerText="Cidade" dataField="cidade"/>			
		</mx:columns>
	</mx:DataGrid>
	<mx:Button id="saveButton" x="412" y="130" label="Salvar" click="onSaveClick()"/>
	<mx:TextArea id="txt1" x="10" y="175" width="228" height="231" editable="false"/>
	<mx:TextArea id="txt2" x="246" y="175" width="228" height="231" editable="false"/>
	<mx:Button x="346" y="130" label="Listar" click="iniciar()"/>
 
</mx:Application>

Valeu ai!

Felipe
Marau-RS

Share on Facebook
Categories: Flex Tags:

Exemplo ComboBox – Post Mario Junior

5, abril, 2011 2 comentários

Opa pessoal.
Segue o exemplo disponibilizado no blog do Mario Junior ainda antes da perda dos dados do blog.
Segue o exemplo e as explicações juntamente com o fonte. Créditos para ele.
Só clicar com o direito ali e pegar o fonte.
Exemplo:

Share on Facebook
Categories: Profissional Tags:

Singleton Action Script

22, março, 2011 Sem comentários

Dae Pessoal.

Hoje vamos falar sobre Singleton em Action Script.
Singleton é um modelo de Design Pattern que simplifica o acesso ao objeto, apenas instanciando a mesma. Veja no exemplo a Classe que eu fiz e o seu uso.

package br.com.fborella
{
	public class Singleton
	{
		private static var instance:Singleton;
		public var auxiliar:String;
 
		public function Singleton(enforcer:SingletonEnforcer)
		{
			if (enforcer == null)
				throw new Error("é possivel apenas uma instância");
		}
 
		public static function getInstance():Singleton
		{
			if (instance == null)
				instance=new Singleton(new SingletonEnforcer);
			return instance;
		}
	}
}
//Esse class abaixo e para bloquear qualquer acesso ao construtor.  
class SingletonEnforcer {  
 
}

Usando a mesma:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import br.com.fborella.Singleton;
 
			public var instancia:Singleton = Singleton.getInstance();
 
            public function clique():void{  
            	instancia.auxiliar = 'Teste Singleton';
            	Alert.show(instancia.auxiliar);   
            } 			  			
		]]>
	</fx:Script>
	<s:Button label="Clique aqui" click="clique()"/>
</s:Application>

Valeu ai pessoal..

Felipe

Share on Facebook
Categories: Flex Tags:

Postgres no Ubuntu em poucos comandos.

22, março, 2011 Sem comentários

Dae galera!

Sempre que passo por algo novo e sofro um pouco eu repasso. Entao vamos la

Primeiro comando.

$ sudo apt-get install postgresql-8.3 postgresql-client-8.3

Se você tiver o desktop pode instalar o PgAdmin

$ sudo apt-get install pgadmin3 pgadmin3-data

Depois temos de alterar o usuario postgres. Dê os tres comandos na sequencia
Não esqueça o ponto e virgula no final ( me quebrei um monte para ver isso shaushaus).

sudo su postgres -c psql postgres
ALTER USER postgres WITH PASSWORD ‘password’;
\q

Edite o arquivo postgresql.conf. (se nao conseguir editar é falta de permissão).
Na linha listen_addresses, troque o localhost por *, ficando a linha assim:

listen_addresses = '*'
//este tambem e descomente tirando o #
password_encryption = on

Finalmente a próxima configuração é no arquivo pg_hba.conf
Adicione a sua linha de ips

host    all    all    192.168.1.0    255.255.255.0    md5

Depois disso só restartar o serviço

sudo /etc/init.d/postgresql-8.3 restart

Aqui funcionou qualquer coisa me avisem.

Felipe

Share on Facebook
Categories: Linux Tags:

States Flash Builder

11, março, 2011 Sem comentários

Dae pessoal.

Estou iniciando ainda no FX4 ou Flash Builder como queiram, então tenho minhas dificuldades ainda, mas é muito bom o resultado que estou vendo. Esse dias me deparei com alguns problemas com states que no Flex 3 eu fzia algo do tipo:

Fx3

<mx:State name="logonState">
	<mx:SetProperty target="{textInputNome}" name="visible" value="true" />

Bom as mudanças para o FX4 foram muitas onde no próprio componente adicionamos essas propriedades.
Logo no inicio fiquei de cara achava mais dificil sei la, mas achei que é algo que melhorou muito, ou seja,
sim ficou melhor ja me acostumei e achei mais “clean” o negocio.

veja o exemplo que fiz abaixo:
FX4

e o Codigo fica esse

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   minWidth="955" minHeight="600"
			   currentState="state1" viewSourceURL="srcview/index.html">
	<fx:Declarations>
 
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
 
			import spark.events.IndexChangeEvent;
			[Bindable]
			private var arrayCollection:ArrayCollection=new ArrayCollection([
				{prop:'state1'},{prop:'state2'}]);
 
 
 
 
			protected function comboBox_changeHandler(event:IndexChangeEvent):void
			{
				this.currentState=comboBox.selectedItem.prop;
			}
 
		]]>
	</fx:Script>
	<s:states>
		<s:State name="state1"/>
		<s:State name="state2"/>		
	</s:states>	
	<mx:Form>
		<mx:FormItem>
			<s:TextInput id="textInput1" text.state1="FELIPE" text.state2="BORELLA"/>		
		</mx:FormItem>		
		<mx:FormItem>
			<s:TextInput id="textInput2" text.state1="BORELLA" text.state2="FELIPE"/>		
		</mx:FormItem>
		<mx:FormItem>
			<s:ComboBox id="comboBox" labelField="prop" dataProvider="{arrayCollection}"
						change="comboBox_changeHandler(event)" selectedIndex="0"/>		
		</mx:FormItem>
	</mx:Form>	
</s:Application>

Felipe!

Share on Facebook
Categories: Flex Tags: