/*
* Copyright 2013 Hewlett-Packard Development Company, L.P
*
* 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 com.hp.alm.ali.idea.model;
import java.util.Comparator;
public class Field implements KeyValue {
public static Comparator<Field> LABEL_COMPARATOR = new Comparator<Field>() {
public int compare(Field field1, Field field2) {
return field1.getLabel().compareTo(field2.getLabel());
}
};
private String name;
private String label;
private Class clazz = String.class;
private Integer listId;
private boolean editable;
private boolean blob;
private boolean canFilter;
private boolean noSort;
private boolean required;
private String referencedType;
private String referencedTypeField;
public Field(String name, String label) {
this.name = name;
this.label = label;
}
public void setClazz(Class clazz) {
this.clazz = clazz;
}
public Class getClazz() {
return clazz;
}
public void setLabel(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public String getName() {
return name;
}
public Integer getListId() {
return listId;
}
public void setListId(Integer listId) {
this.listId = listId;
}
public boolean isEditable() {
return editable;
}
public void setEditable(boolean editable) {
this.editable = editable;
}
public boolean isBlob() {
return blob;
}
public void setBlob(boolean blob) {
this.blob = blob;
}
public boolean isCanFilter() {
return canFilter;
}
public void setCanFilter(boolean canFilter) {
this.canFilter = canFilter;
}
public boolean isNoSort() {
return noSort;
}
public void setNoSort(boolean noSort) {
this.noSort = noSort;
}
public boolean isRequired() {
return required;
}
public void setRequired(boolean required) {
this.required = required;
}
public Field cloneRelated(String relatedType) {
Field field = new Field(relatedType + "." + getName(), getLabel());
field.setBlob(isBlob());
field.setRequired(isRequired());
field.setCanFilter(isCanFilter());
field.setNoSort(isNoSort());
field.setEditable(isEditable());
field.setClazz(getClazz());
field.setListId(getListId());
field.setReferencedTypeField(getReferencedTypeField());
field.setReferencedType(getReferencedType());
return field;
}
public String getRelatedType() {
int p = name.indexOf(".");
if(p < 0) {
return null;
} else {
return name.substring(0, p);
}
}
@Override
public String getKey() {
return name;
}
@Override
public String getValue() {
return label;
}
public String getReferencedType() {
return referencedType;
}
public String resolveReference(Entity entity) {
if(referencedType != null) {
return referencedType;
} else if(referencedTypeField != null) {
return entity.getPropertyValue(referencedTypeField);
} else {
return null;
}
}
public void setReferencedType(String referencedType) {
this.referencedType = referencedType;
}
public String getReferencedTypeField() {
return referencedTypeField;
}
public void setReferencedTypeField(String referencedTypeField) {
this.referencedTypeField = referencedTypeField;
}
/**
* Field references one or more entity types.
* @return reference
*/
public boolean isReference() {
return referencedType != null || referencedTypeField != null;
}
}