/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.impl.protocol.jabber.extensions.whiteboard;
import java.awt.*;
import net.java.sip.communicator.service.protocol.whiteboardobjects.*;
/**
* WhiteboardObjectJabberImpl
* <p>
* WhiteboardObjectJabberImpl are created through
* the <tt>WhiteboardSession</tt> session.
* <p>
*
* All WhiteboardObjectJabberImpl have whiteboard object id.
*
* @author Julien Waechter
*/
public abstract class WhiteboardObjectJabberImpl
implements WhiteboardObject
{
/**
* An integer indicating the thickness (represented as number of
* pixels) of this whiteboard object (or its border).
*/
private int thickness = 1;
/**
* A String that uniquely identifies this WhiteboardObject.
*/
private String ID;
/**
* The RGB value of the color of this object.
*/
private int color;
/**
* Default WhiteboardObjectJabberImpl constructor
*/
public WhiteboardObjectJabberImpl ()
{
this.setID (generateID ());
}
/**
* WhiteboardObjectJabberImpl constructor
*
* @param id A String that uniquely identifies this WhiteboardObject.
* @param thickness An integer indicating the thickness (number of pixels).
* @param color The RGB value of the color of this object.
*/
public WhiteboardObjectJabberImpl (String id, int thickness, int color)
{
this.setID (id);
this.setColor (color);
this.setThickness (thickness);
}
/**
* Generate a String uniquely identifying this WhiteboardObject.
*
* @return a String that uniquely identifies this WhiteboardObject.
*/
protected String generateID ()
{
return String.valueOf ( System.currentTimeMillis ())
+ String.valueOf (super.hashCode ());
}
/**
* Returns a String uniquely identifying this WhiteboardObject.
*
* @return a String that uniquely identifies this WhiteboardObject.
*/
public String getID ()
{
return this.ID;
}
/**
* Sets a String uniquely identifying this WhiteboardObject.
*
* @param ID a String that uniquely identifies this WhiteboardObject.
*/
protected void setID (String ID)
{
this.ID = ID;
}
/**
* Returns an integer indicating the thickness (represented as number of
* pixels) of this whiteboard object (or its border).
*
* @return the thickness (in pixels) of this object (or its border).
*/
public int getThickness ()
{
return thickness;
}
/**
* Indicates whether some other WhiteboardObject is "equal to" this one.
* @param obj the reference object with which to compare.
* @return <code>true</code> if this object is the same as the obj
* argument; <code>false</code> otherwise.
*/
@Override
public boolean equals (Object obj)
{
if(obj == null
|| !(obj instanceof WhiteboardObject))
return false;
if (obj == this
|| ((WhiteboardObject)obj).getID ().equals ( getID () ))
return true;
return false;
}
/**
* Returns an integer representing the color of this object. The return
* value uses standard RGB encoding: bits 24-31 are alpha, 16-23 are red,
* 8-15 are green, 0-7 are blue.
*
* @return the RGB value of the color of this object.
*/
public int getColor ()
{
return color;
}
/**
* Sets the color of this whiteboard object (or rather it's border). The
* color parameter must be encoded with standard RGB encoding: bits 24-31
* are alpha, 16-23 are red, 8-15 are green, 0-7 are blue.
*
* @param color the color that we'd like to set on this object (using
* standard RGB encoding).
*/
public void setColor (int color)
{
this.color = color;
}
/**
* Converts a int to hexa
* @param i int value
* @return hexa value
*/
private String hex (int i)
{
String h = Integer.toHexString (i);
if (i < 10)
{
h = "0" + h;
}
return h.toUpperCase ();
}
/**
* Converts a int color to a hexa color code
* @param color color
* @return hexa color code
*/
protected String colorToHex (int color)
{
return colorToHex (Color.getColor ("",color));
}
/**
* Converts a color to a hexa color code
* @param color color
* @return hexa color code
*/
protected String colorToHex (Color color)
{
return "#" + hex (color.getRed ()) +
hex (color.getGreen ()) +
hex (color.getBlue ());
}
/**
* Sets the thickness (in pixels) of this whiteboard object.
*
* @param thickness the number of pixels that this object (or its border)
* should be thick.
*/
public void setThickness (int thickness)
{
this.thickness = thickness;
}
/**
* Returns the XML reppresentation of the PacketExtension.
*
* @return the packet extension as XML.
* @todo Implement this org.jivesoftware.smack.packet.PacketExtension
* method
*/
public abstract String toXML ();
}