[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r527 - in /projects/zb4osgi/trunk/zigbee.zcl.library/src: main/java/it/cnr/isti/zigbee/zcl/library/api/core/ main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/ test/java/it/cnr/isti/zigbee/zcl/library/impl/general/ test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/ test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/

scm-notify at zb4osgi.aaloa.org scm-notify at zb4osgi.aaloa.org
Fri Oct 19 13:37:22 CEST 2012


Author: stefano.lenzi
Date: Fri Oct 19 13:37:22 2012
New Revision: 527

Log:
Added a new ZigBeeSerializer that automatically increase the payload ( it may have worst performance )
Fixed NPE with AddGroupIfIdentifyingCommand ( fixes #134 )


Added:
    projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java   (with props)
    projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/
    projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/
    projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java   (with props)
Modified:
    projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java
    projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java
    projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java
    projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java

Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java Fri Oct 19 13:37:22 2012
@@ -82,4 +82,10 @@
 	public void append_int24bit(int data);
 	public void append_long(long data);
 	
+	/**
+	 * 
+	 * @return a copy of the payload
+	 * @since 0.8.0
+	 */
+	public byte[] getPayload();
 }

Added: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java (added)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java Fri Oct 19 13:37:22 2012
@@ -1,0 +1,176 @@
+/*
+   Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
+   Institute of Information Science and Technologies 
+   of the Italian National Research Council 
+
+
+   See the NOTICE file distributed with this work for additional 
+   information regarding copyright ownership
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package it.cnr.isti.zigbee.zcl.library.impl.core;
+
+import it.cnr.isti.primitvetypes.util.Integers;
+import it.cnr.isti.zigbee.zcl.library.api.core.ZBDeserializer;
+import it.cnr.isti.zigbee.zcl.library.api.core.ZBSerializer;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * 
+ * The implementation of the {@link ZBSerializer} that will replace the {@link DefaultSerializer}. <br />
+ * In fact, this class does not require the user to build in advance a payload buffer.  
+ * 
+ * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
+ * @version $LastChangedRevision$ ($LastChangedDate$)
+ * @since 0.7.1
+ *
+ */
+public class ByteArrayOutputStreamSerializer implements ZBSerializer {
+
+	private ByteArrayOutputStream payload;
+	private byte[] buffer = new byte[8];
+	
+	public ByteArrayOutputStreamSerializer() {
+		this.payload = new ByteArrayOutputStream();
+	}
+	
+	public ByteArrayOutputStreamSerializer(ByteArrayOutputStream payload) {
+		this.payload = payload;
+	}
+	
+	public void appendBoolean(Boolean data) {
+		int used = Integers.writeBooleanObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void appendByte(Byte data) {
+		int used = Integers.writeByteObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void appendInteger(Integer data) {
+		int used = Integers.writeIntObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void appendLong(Long data) {
+		int used = Integers.writeLongObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+	
+	public void appendString(String str){
+		try {
+			payload.write(str.getBytes());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void appendZigBeeType(Object data, ZigBeeType type) {
+		if ( data == null ) {
+			throw new NullPointerException("You can not append null data to a stream");
+		}
+		switch (type) {
+			case Boolean:
+				appendBoolean((Boolean) data);
+			break;
+			case Data8bit: case SignedInteger8bit: case Bitmap8bit: case UnsignedInteger8bit: case Enumeration8bit:
+				final Number b = (Number) data;
+				append_byte(b.byteValue());
+			break;
+			case Data16bit: case SignedInteger16bit: case Bitmap16bit: case UnsignedInteger16bit: case Enumeration16bit:
+				final Number s = (Number) data;
+				append_short(s.shortValue());
+			break;
+			case Data24bit: case SignedInteger24bit: case Bitmap24bit: case UnsignedInteger24bit:
+				new IllegalArgumentException(
+						"No reader defined by this "+ZBDeserializer.class.getName()+
+						" for "+type.toString()+" ("+type.getId()+")"
+				);
+			break;
+			case Data32bit: case SignedInteger32bit: case Bitmap32bit: case UnsignedInteger32bit:
+				if(type == ZigBeeType.UnsignedInteger32bit){
+					final Long l = (Long) data;
+					append_int(l.intValue());
+				}else{
+					final Integer i = (Integer) data;
+					append_int(i.intValue());
+				}				
+			break;
+			case CharacterString: case OctectString: {
+				final String str = (String) data;
+				append_byte( (byte) (str.length() & (0xFF) ));
+				appendString(str);
+			} break;
+			case LongCharacterString: case LongOctectString: {
+				final String str = (String) data;
+				append_short((short) (str.length() & (0xFFFF)));
+				appendString(str);
+			} break;
+			default:
+				throw new IllegalArgumentException(
+						"No reader defined by this "+ZBDeserializer.class.getName()+
+						" for "+type.toString()+" ("+type.getId()+")"
+				);				
+		}
+	}
+	
+	public void appendObject(Object data) {
+		int used = Integers.writeObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void appendShort(Short data) {
+		int used = Integers.writeShortObject(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void append_boolean(boolean data) {
+		int used = Integers.writeBoolean(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void append_byte(byte data) {
+		int used = Integers.writeByte(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void append_int(int data) {
+		int used = Integers.writeInt(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+	
+	public void append_int24bit(int data) {
+		int used = Integers.writeInt24bit(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void append_long(long data) {
+		int used = Integers.writeLong(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+
+	public void append_short(short data) {
+		int used = Integers.writeShort(buffer, 0, data);
+		payload.write(buffer,0,used);
+	}
+	
+	public byte[] getPayload() {
+		return payload.toByteArray();
+	}
+
+}

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java Fri Oct 19 13:37:22 2012
@@ -34,12 +34,19 @@
  * @author <a href="mailto:francesco.furfari at isti.cnr.it">Francesco Furfari</a>
  * @version $LastChangedRevision$ ($LastChangedDate$)
  * @since 0.1.0
+ * @deprecated From version 0.7.0 please use the {@link ByteArrayOutputStreamSerializer} instead
  *
  */
 public class DefaultSerializer implements ZBSerializer {
 	int index = 0;
 	private byte[] payload;
 	
+	/**
+	 * 
+	 * @param payload the byte array that will used for storing the serialiazed data
+	 * @param index the first empty byte where data will be written
+	 * @deprecated From version 0.7.0 please use the {@link ByteArrayOutputStreamSerializer} instead
+	 */
 	public DefaultSerializer(byte[] payload, int index ) {
 		this.payload = payload;
 		this.index = index;
@@ -148,4 +155,9 @@
 		index += Integers.writeShort(payload, index, data);
 	}
 
+	public byte[] getPayload() {
+		byte[] copy = new byte[index];
+		System.arraycopy(payload, 0, copy, 0, copy.length);
+		return copy;
+	}
 }

Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java Fri Oct 19 13:37:22 2012
@@ -22,10 +22,16 @@
 
 package it.cnr.isti.zigbee.zcl.library.impl.general.groups;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteOrder;
+
 import it.cnr.isti.zigbee.zcl.library.api.core.ZBSerializer;
 import it.cnr.isti.zigbee.zcl.library.api.general.Groups;
 import it.cnr.isti.zigbee.zcl.library.impl.core.AbstractCommand;
+import it.cnr.isti.zigbee.zcl.library.impl.core.ByteArrayOutputStreamSerializer;
 import it.cnr.isti.zigbee.zcl.library.impl.core.DefaultSerializer;
+import it.cnr.isti.zigbee.zcl.library.impl.core.ZigBeeType;
 /**
  * 
  * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
@@ -40,15 +46,21 @@
 	
 	public AddGroupIfIdentyfingCommand(int groupId, String name){
 		super(Groups.ADD_GROUP_IF_IDENTIFYING_ID);
+		this.groupId = groupId;
+		this.name = name;
 	}
 	
 	public byte[] getPayload(){	
 		if( payload == null){			
-			payload = new byte[2 + name.length()];
-			ZBSerializer serializer = new DefaultSerializer(payload,0);
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			ZBSerializer serializer = new ByteArrayOutputStreamSerializer(bos);
 			serializer.append_short((short)groupId);
-			//TODO use the serializer.appendObject(Object, ZigBeeType)
-			serializer.appendObject(name);
+			serializer.appendZigBeeType(name, ZigBeeType.CharacterString);
+			payload = serializer.getPayload();
+			try {
+				bos.close();
+			} catch (IOException ignored) {				
+			}
 		}
 		return payload;
 	}

Added: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java (added)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java Fri Oct 19 13:37:22 2012
@@ -1,0 +1,57 @@
+/*
+
+   Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
+   Institute of Information Science and Technologies 
+   of the Italian National Research Council 
+
+
+   See the NOTICE file distributed with this work for additional 
+   information regarding copyright ownership
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+package it.cnr.isti.zigbee.zcl.library.impl.general.groups;
+
+import static org.junit.Assert.*;
+import it.cnr.isti.zigbee.zcl.library.api.global.WriteAttributeRecord;
+import it.cnr.isti.zigbee.zcl.library.impl.attribute.Attributes;
+import it.cnr.isti.zigbee.zcl.library.impl.core.AttributeImpl;
+import it.cnr.isti.zigbee.zcl.library.impl.global.write.WriteAttributeCommand;
+import it.cnr.isti.zigbee.zcl.library.impl.global.write.WriteAttributeRecordImpl;
+
+import org.junit.Test;
+
+/**
+ * 
+ * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
+ * @version $LastChangedRevision$ ($LastChangedDate$)
+ * @since 0.7.1
+ *
+ */
+public class AddGroupIfIdentyfingCommandTest {
+
+	@Test
+	public void testGetPayload() {
+		AddGroupIfIdentyfingCommand command = new AddGroupIfIdentyfingCommand(0x1020,"House");
+		assertArrayEquals(new byte[]{
+				0x20, 0x10, 0x05, 0x48, 0x6f, 0x75, 0x73, 0x65
+		}, command.getPayload()
+		);
+		
+		assertArrayEquals(new byte[]{
+				0x20, 0x10, 0x05, 0x48, 0x6f, 0x75, 0x73, 0x65
+		}, command.getPayload()
+		);
+	}
+
+}

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java Fri Oct 19 13:37:22 2012
@@ -1,4 +1,5 @@
 /*
+
    Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
    Institute of Information Science and Technologies 
    of the Italian National Research Council 




More information about the Commit mailing list