/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.localserver.attribute;
import Sirius.server.middleware.types.MetaObject;
import Sirius.server.newuser.permission.PermissionHolder;
import Sirius.server.newuser.permission.Policy;
import Sirius.util.Mapable;
import org.apache.log4j.Logger;
import java.io.Serializable;
import de.cismet.cids.tools.tostring.StringConvertable;
import de.cismet.cids.tools.tostring.ToStringConverter;
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public abstract class Attribute implements Mapable, Serializable, StringConvertable {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(Attribute.class);
//~ Instance fields --------------------------------------------------------
// warum string?? totaler unsinn bei Gelgenheit nochmal int (vorher checken was mit class_attribs ist)
// id des Attributs (des Datensatzes in cs_attr)
protected String id; // Hell: String wird glaube ich bei den Arrays benoetigt: id+"."+counter
protected String name;
protected String description;
protected boolean visible;
protected PermissionHolder permissions;
// attribute is foreign key
protected boolean referencesObject = false;
protected boolean substitute;
/** This attributes value. */
protected java.lang.Object value;
/** The Classkey of the value if the value is a metaobject. */
protected String classKey = null;
// sql type
protected int typeId;
protected boolean changed;
protected boolean isPrimaryKey = false;
protected String javaType;
protected boolean isArray = false;
protected transient ToStringConverter toStringConverter;
// protected String defaultValue="";
protected boolean optional = false;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new Attribute object.
*
* @param a DOCUMENT ME!
*/
public Attribute(final Attribute a) {
this.id = a.id;
this.name = a.name.trim();
// TODO: error
this.description = a.description;
this.permissions = a.getPermissions();
this.visible = a.visible;
this.referencesObject = a.referencesObject;
}
/**
* Creates a new Attribute object.
*
* @param id DOCUMENT ME!
* @param name DOCUMENT ME!
* @param description DOCUMENT ME!
* @param policy DOCUMENT ME!
*/
public Attribute(final String id, final String name, final String description, final Policy policy) {
this.id = id;
this.name = name;
this.description = description;
this.permissions = new PermissionHolder(policy);
this.visible = true;
this.referencesObject = false;
}
/**
* Creates a new Attribute object.
*
* @param id DOCUMENT ME!
* @param name DOCUMENT ME!
* @param description DOCUMENT ME!
* @param permissions DOCUMENT ME!
*/
public Attribute(final String id, final String name, final String description, final PermissionHolder permissions) {
this(id, name, description, (Policy)null);
this.permissions = permissions;
}
/**
* Creates a new Attribute object.
*
* @param id DOCUMENT ME!
* @param name DOCUMENT ME!
* @param description DOCUMENT ME!
* @param visible DOCUMENT ME!
* @param policy DOCUMENT ME!
*/
public Attribute(final String id,
final String name,
final String description,
final boolean visible,
final Policy policy) {
this(id, name, description, policy);
this.visible = visible;
}
/**
* Creates a new Attribute object.
*
* @param id DOCUMENT ME!
* @param name DOCUMENT ME!
* @param description DOCUMENT ME!
* @param permissions DOCUMENT ME!
* @param visible DOCUMENT ME!
*/
public Attribute(final String id,
final String name,
final String description,
final PermissionHolder permissions,
final boolean visible) {
this(id, name, description, permissions);
this.visible = visible;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getID() {
return id;
}
// Mapable schl\u00FCssel \u00E4ndern xxx
@Override
public Object getKey() {
return id + ""; // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final Object getValue() {
return value;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getName() {
return name;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getDescription() {
return description;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isVisible() {
return visible;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final PermissionHolder getPermissions() {
return permissions;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean referencesObject() {
return referencesObject;
}
/**
* DOCUMENT ME!
*
* @param b DOCUMENT ME!
*/
public final void setReferencesObject(final boolean b) {
referencesObject = b;
}
/**
* DOCUMENT ME!
*
* @param permissions DOCUMENT ME!
*/
public final void setPermissions(final PermissionHolder permissions) {
this.permissions = permissions;
}
/**
* Setter for property value.
*
* @param value New value of property value.
*/
public void setValue(final Object value) {
this.value = value;
}
@Override
public Object constructKey(final Mapable m) {
if (m instanceof Attribute) {
return m.getKey();
} else {
return null;
}
}
@Override
public String toString() {
if (value != null) {
if (toStringConverter != null) {
return toStringConverter.convert(this);
} else if (referencesObject && (value instanceof MetaObject)) {
return ((MetaObject)value).toString();
} else {
return value.toString();
}
} else {
return ""; // NOI18N
}
}
/**
* Setter for property visible.
*
* @param visible New value of property visible.
*/
public void setVisible(final boolean visible) {
this.visible = visible;
}
/**
* Getter for property substitute.
*
* @return Value of property substitute.
*/
public boolean isSubstitute() {
return substitute;
}
/**
* Setter for property substitute.
*
* @param substitute New value of property substitute.
*/
public void setSubstitute(final boolean substitute) {
this.substitute = substitute;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getClassKey() {
if (classKey != null) {
return classKey;
} else {
LOG.error("Attribute Value no type for getCLassKey ::" + value.getClass()); // NOI18N
return null;
}
}
/**
* Setter for property classKey.
*
* @param classKey New value of property classKey.
*/
public void setClassKey(final java.lang.String classKey) {
this.classKey = classKey;
}
/**
* DOCUMENT ME!
*
* @param typeId DOCUMENT ME!
*/
public void setTypeId(final int typeId) {
this.typeId = typeId;
}
/**
* Getter for property typeId.
*
* @return Value of property typeId.
*/
public int getTypeId() {
return typeId;
}
/**
* Getter for property changed.
*
* @return Value of property changed.
*/
public boolean isChanged() {
return changed;
}
/**
* Setter for property changed.
*
* @param changed New value of property changed.
*/
public void setChanged(final boolean changed) {
this.changed = changed;
}
/**
* DOCUMENT ME!
*/
public void setValuesNull() {
if (!referencesObject) {
value = null;
if (LOG.isDebugEnabled()) {
LOG.debug("would set " + value + " to null"); // NOI18N
}
} else {
((Sirius.server.localserver.object.Object)value).setValuesNull();
}
}
/**
* Getter for property isPrimaryKey.
*
* @return Value of property isPrimaryKey.
*/
public boolean isPrimaryKey() {
return isPrimaryKey;
}
/**
* Setter for property isPrimaryKey.
*
* @param isPrimaryKey New value of property isPrimaryKey.
*/
public void setIsPrimaryKey(final boolean isPrimaryKey) {
this.isPrimaryKey = isPrimaryKey;
}
/**
* Getter for property javaType.
*
* @return Value of property javaType.
*/
public String getJavaType() {
return javaType;
}
/**
* Setter for property javaType.
*
* @param javaType New value of property javaType.
*/
public void setJavaType(final String javaType) {
this.javaType = javaType;
}
/**
* Getter for property isArray.
*
* @return Value of property isArray.
*/
public boolean isArray() {
return isArray;
}
/**
* Setter for property isArray.
*
* @param isArray New value of property isArray.
*/
public void setIsArray(final boolean isArray) {
this.isArray = isArray;
}
/**
* DOCUMENT ME!
*
* @param id DOCUMENT ME!
*/
public void setId(final String id) {
this.id = id;
}
/**
* DOCUMENT ME!
*/
public void printMe() {
System.out.println(name + " : " + value); // NOI18N
}
/**
* Getter for property toString.
*
* @return Value of property toString.
*/
public ToStringConverter getToStringConverter() {
return toStringConverter;
}
/**
* DOCUMENT ME!
*
* @param optional DOCUMENT ME!
*/
public void setOptional(final boolean optional) {
this.optional = optional;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isOptional() {
return optional;
}
}