package org.ovirt.engine.core.common.businessentities; import java.util.ArrayList; import java.util.Arrays; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.ovirt.engine.core.common.businessentities.mapping.GuidType; import org.ovirt.engine.core.common.validation.annotation.ValidName; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.validation.group.UpdateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.INotifyPropertyChanged; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "roles") @Entity @Table(name = "roles") @TypeDef(name = "guid", typeClass = GuidType.class) public class roles extends IVdcQueryable implements INotifyPropertyChanged, BusinessEntity<Guid> { private static final long serialVersionUID = 1487620954798772886L; private static final ArrayList<String> _event_subscriberProperties = new ArrayList<String>( Arrays.asList(new String[] { "id", "name", "description", "is_readonly" })); @Size(max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) @Column(name = "description", length = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) private String description; @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "org.ovirt.engine.core.dao.GuidGenerator") @Column(name = "Id") @Type(type = "guid") private Guid id = new Guid(); @Column(name = "is_readonly", nullable = false) private boolean readOnly; @NotNull(message = "VALIDATION.ROLES.NAME.NOT_NULL", groups = { CreateEntity.class, UpdateEntity.class }) @Size(min = 1, max = BusinessEntitiesDefinitions.ROLE_NAME_SIZE, message = "VALIDATION.ROLES.NAME.MAX", groups = { CreateEntity.class, UpdateEntity.class }) @ValidName(message = "VALIDATION.ROLES.NAME.INVALID", groups = { CreateEntity.class, UpdateEntity.class }) @Column(name = "name", length = BusinessEntitiesDefinitions.ROLE_NAME_SIZE, nullable = false) private String name; /** * MLA addition - distinct admin roles from user roles. Mainly used to prevent user from gaining admin permissions */ @Column(name = "role_type", nullable = false) private RoleType type; public roles() { } // TODO add type to the constructor? - depends on future code changes by // Omer public roles(String description, Guid id, String name) { this.description = description; this.id = id; this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + (readOnly ? 1231 : 1237); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; roles other = (roles) obj; if (description == null) { if (other.description != null) return false; } else if (!description.equals(other.description)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (readOnly != other.readOnly) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (type != other.type) return false; return true; } @Override public ArrayList<String> getChangeablePropertiesList() { return _event_subscriberProperties; } @XmlElement public String getdescription() { return this.description; } @XmlElement public boolean getis_readonly() { return this.readOnly; } @XmlElement public String getname() { return this.name; } @Override public Object getQueryableId() { return getId(); } public void setdescription(String value) { this.description = value; OnPropertyChanged(new PropertyChangedEventArgs("description")); } public void setis_readonly(boolean value) { this.readOnly = value; OnPropertyChanged(new PropertyChangedEventArgs("is_readonly")); } public void setname(String value) { this.name = value; OnPropertyChanged(new PropertyChangedEventArgs("name")); } public void setType(RoleType type) { this.type = type; } @XmlElement(name = "Type") public RoleType getType() { return type; } // TODO -This method and its reference code are being tested with the GWT // UI. // Remove this only when its surely not needed by them. protected void OnPropertyChanged(PropertyChangedEventArgs e) { /* if (PropertyChanged != null) */ { /* PropertyChanged(this, e); */ } } @Override @XmlElement(name = "Id") public Guid getId() { return id; } @Override public void setId(Guid id) { this.id = id; } }