/*
* CatalogTexture.java 5 oct. 07
*
* Sweet Home 3D, Copyright (c) 2007 Emmanuel PUYBARET / eTeks <info@eteks.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.eteks.sweethome3d.model;
import java.text.Collator;
/**
* A texture in textures catalog.
* @author Emmanuel Puybaret
*/
public class CatalogTexture implements TextureImage, Comparable<CatalogTexture> {
private static final long serialVersionUID = 1L;
private final String id;
private final String name;
private final Content image;
private final float width;
private final float height;
private final String creator;
private final boolean modifiable;
private TexturesCategory category;
private static final Collator COMPARATOR = Collator.getInstance();
/**
* Creates an unmodifiable catalog texture.
* @param name the name of this texture
* @param image the content of the image used for this texture
* @param width the width of the texture in centimeters
* @param height the height of the texture in centimeters
*/
public CatalogTexture(String name, Content image, float width, float height) {
this(null, name, image, width, height, null);
}
/**
* Creates a catalog texture.
* @param id the id of the texture
* @param name the name of this texture
* @param image the content of the image used for this texture
* @param width the width of the texture in centimeters
* @param height the height of the texture in centimeters
* @param creator the creator of this texture
*/
public CatalogTexture(String id,
String name, Content image,
float width, float height,
String creator) {
this(id, name, image, width, height, creator, false);
}
/**
* Creates a catalog texture.
* @param name the name of this texture
* @param image the content of the image used for this texture
* @param width the width of the texture in centimeters
* @param height the height of the texture in centimeters
* @param modifiable <code>true</code> if this texture can be modified
*/
public CatalogTexture(String name, Content image,
float width, float height,
boolean modifiable) {
this(null, name, image, width, height, null, modifiable);
}
public CatalogTexture(String id,
String name, Content image,
float width, float height,
String creator,
boolean modifiable) {
this.id = id;
this.name = name;
this.image = image;
this.width = width;
this.height = height;
this.creator = creator;
this.modifiable = modifiable;
}
/**
* Returns the ID of this texture or <code>null</code>.
* @since 2.3
*/
public String getId() {
return this.id;
}
/**
* Returns the name of this texture.
*/
public String getName() {
return this.name;
}
/**
* Returns the content of the image used for this texture.
*/
public Content getImage() {
return this.image;
}
/**
* Returns the width of the image in centimeters.
*/
public float getWidth() {
return this.width;
}
/**
* Returns the height of the image in centimeters.
*/
public float getHeight() {
return this.height;
}
/**
* Returns the creator of this texture or <code>null</code>.
* @since 2.3
*/
public String getCreator() {
return this.creator;
}
/**
* Returns <code>true</code> if this texture is modifiable (not read from resources).
*/
public boolean isModifiable() {
return this.modifiable;
}
/**
* Returns the category of this texture.
*/
public TexturesCategory getCategory() {
return this.category;
}
/**
* Sets the category of this texture.
*/
void setCategory(TexturesCategory category) {
this.category = category;
}
/**
* Returns true if this texture and the one in parameter are the same objects.
* Note that, from version 3.6, two textures can have the same name.
*/
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
/**
* Returns default hash code.
*/
@Override
public int hashCode() {
return super.hashCode();
}
/**
* Compares the names of this texture and the one in parameter.
*/
public int compareTo(CatalogTexture texture) {
int nameComparison = COMPARATOR.compare(this.name, texture.name);
if (nameComparison != 0) {
return nameComparison;
} else {
return this.modifiable == texture.modifiable
? 0
: (this.modifiable ? 1 : -1);
}
}
}