/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.featureservice;
import org.jdom.Element;
import java.util.Arrays;
import de.cismet.cismap.commons.ConvertableToXML;
/**
* Describes the attributes of all Features available in a certain layer.
*
* @author Sebastian Puhl
* @author Pascal Dihé
* @version $Revision$, $Date$
*/
public class FeatureServiceAttribute implements ConvertableToXML, Cloneable {
//~ Static fields/initializers ---------------------------------------------
// public static final String STRING = "string";
// public static final String INTEGER = "integer";
// public static final String GEOMETRY = "geometry";
public static final String IS_SELECTED = "isSelected"; // NOI18N
//~ Instance fields --------------------------------------------------------
private final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(this.getClass());
private String type;
private String name;
private boolean geometry;
private boolean selected;
private boolean visible = true;
private boolean nameElement = false;
private String alias;
private boolean ascOrder = true;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new FeatureServiceAttribute object.
*
* @param e DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public FeatureServiceAttribute(final Element e) throws Exception {
this.initFromElement(e);
}
/**
* Creates a new FeatureServiceAttribute object.
*
* @param name DOCUMENT ME!
* @param type DOCUMENT ME!
* @param isSelected DOCUMENT ME!
*/
public FeatureServiceAttribute(final String name, final String type, final boolean isSelected) {
setName(name);
// type.substring(4) removes the namespace gml:
if (FeatureServiceUtilities.isElementOfGeometryType(type)) {
setGeometry(true);
}
setSelected(isSelected);
setType(type);
}
/**
* Creates a new FeatureServiceAttribute object.
*
* @param featureServiceAttribute DOCUMENT ME!
*/
protected FeatureServiceAttribute(final FeatureServiceAttribute featureServiceAttribute) {
this(new String(featureServiceAttribute.getName()),
String.valueOf(featureServiceAttribute.getType()),
featureServiceAttribute.isSelected());
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getName() {
return name;
}
/**
* DOCUMENT ME!
*
* @param name DOCUMENT ME!
*/
public void setName(final String name) {
this.name = name;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getAlias() {
if (alias == null) {
return "";
} else {
return alias;
}
}
/**
* DOCUMENT ME!
*
* @param alias DOCUMENT ME!
*/
public void setAlias(final String alias) {
this.alias = alias;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getType() {
return type;
}
/**
* DOCUMENT ME!
*
* @param type DOCUMENT ME!
*/
public void setType(final String type) {
this.type = type;
}
/**
* DOCUMENT ME!
*
* @param isGeometry DOCUMENT ME!
*/
public void setGeometry(final boolean isGeometry) {
this.geometry = isGeometry;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isGeometry() {
return geometry;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isSelected() {
return selected;
}
/**
* DOCUMENT ME!
*
* @param isSelected DOCUMENT ME!
*/
public void setSelected(final boolean isSelected) {
this.selected = isSelected;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isVisible() {
return visible;
}
/**
* DOCUMENT ME!
*
* @param visible DOCUMENT ME!
*/
public void setVisible(final boolean visible) {
this.visible = visible;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isNameElement() {
return nameElement;
}
/**
* DOCUMENT ME!
*
* @param nameElement visible DOCUMENT ME!
*/
public void setNameElement(final boolean nameElement) {
this.nameElement = nameElement;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final FeatureServiceAttribute other = (FeatureServiceAttribute)obj;
if ((this.type != other.type) && ((this.type == null) || !this.type.equals(other.type))) {
return false;
}
if ((this.name != other.name) && ((this.name == null) || !this.name.equals(other.name))) {
return false;
}
if ((this.alias != other.alias) && ((this.alias == null) || !this.alias.equals(other.alias))) {
return false;
}
if (this.geometry != other.geometry) {
return false;
}
if (this.selected != other.selected) {
return false;
}
if (this.visible != other.visible) {
return false;
}
if (this.nameElement != other.nameElement) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = (71 * hash) + ((this.type != null) ? this.type.hashCode() : 0);
hash = (71 * hash) + ((this.name != null) ? this.name.hashCode() : 0);
hash = (71 * hash) + (this.geometry ? 1 : 0);
hash = (71 * hash) + (this.selected ? 1 : 0);
return hash;
}
@Override
public Element toElement() {
final Element featureServiceAttribute = new Element(FeatureServiceAttribute.class.getSimpleName());
featureServiceAttribute.setAttribute(ConvertableToXML.TYPE_ATTRIBUTE, this.getClass().getCanonicalName());
featureServiceAttribute.setAttribute(FeatureServiceUtilities.XML_NAME_STRING, getName());
featureServiceAttribute.setAttribute(FeatureServiceUtilities.XML_ALIAS_STRING, getAlias());
featureServiceAttribute.setAttribute(FeatureServiceUtilities.IS_GEOMETRY, String.valueOf(isGeometry()));
featureServiceAttribute.setAttribute(IS_SELECTED, String.valueOf(selected));
featureServiceAttribute.setAttribute(FeatureServiceUtilities.IS_VISIBLE, String.valueOf(visible));
featureServiceAttribute.setAttribute(FeatureServiceUtilities.IS_NAME_ELEMENT, String.valueOf(nameElement));
featureServiceAttribute.setAttribute(FeatureServiceUtilities.XML_TYPE_STRING, getType());
return featureServiceAttribute;
}
@Override
public void initFromElement(final Element element) throws Exception {
if (element.getAttribute(ConvertableToXML.TYPE_ATTRIBUTE) == null) {
log.warn("fromElement: restoring object from deprecarted xml element"); // NOI18N
}
this.setName(element.getAttributeValue(FeatureServiceUtilities.XML_NAME_STRING));
this.setAlias(element.getAttributeValue(FeatureServiceUtilities.XML_ALIAS_STRING));
this.setType(element.getAttributeValue(FeatureServiceUtilities.XML_TYPE_STRING));
final boolean newSelected = (element.getAttributeValue(IS_SELECTED) != null)
? Boolean.valueOf(element.getAttributeValue(IS_SELECTED)) : true;
this.setSelected(newSelected);
final boolean newVisible = (element.getAttributeValue(FeatureServiceUtilities.IS_VISIBLE) != null)
? Boolean.valueOf(element.getAttributeValue(FeatureServiceUtilities.IS_VISIBLE)) : true;
this.setVisible(newVisible);
final boolean newNameElement = (element.getAttributeValue(FeatureServiceUtilities.IS_NAME_ELEMENT) != null)
? Boolean.valueOf(element.getAttributeValue(FeatureServiceUtilities.IS_NAME_ELEMENT)) : false;
this.setNameElement(newNameElement);
final boolean newGeometry = (this.getType() != null) && (FeatureServiceUtilities.isElementOfGeometryType(type));
this.setGeometry(newGeometry);
}
@Override
public FeatureServiceAttribute clone() {
return new FeatureServiceAttribute(this);
}
/**
* DOCUMENT ME!
*
* @return the ascOrder
*/
public boolean isAscOrder() {
return ascOrder;
}
/**
* DOCUMENT ME!
*
* @param ascOrder the ascOrder to set
*/
public void setAscOrder(final boolean ascOrder) {
this.ascOrder = ascOrder;
}
}