/*
* Copyright (c) 2010-2015 Evolveum
*
* 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.evolveum.midpoint.web.component.search;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.prism.ItemDefinition;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.wicket.model.StringResourceModel;
import java.io.Serializable;
/**
* @author Viliam Repan (lazyman)
*/
public class Property implements Serializable, Comparable<Property> {
public static final String F_SELECTED = "selected";
public static final String F_NAME = "name";
private boolean selected;
private ItemDefinition definition;
public Property(ItemDefinition definition) {
Validate.notNull(definition, "Property name must no be null");
this.definition=definition;
}
public ItemDefinition getDefinition() {
return definition;
}
public String getName() {
return getItemDefinitionName(definition);
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Property property = (Property) o;
if (selected != property.selected) return false;
return !(definition != null ? !definition.equals(property.definition) : property.definition != null);
}
@Override
public int hashCode() {
int result = (selected ? 1 : 0);
result = 31 * result + (definition != null ? definition.hashCode() : 0);
return result;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("definition", definition)
.append("selected", selected)
.toString();
}
@Override
public int compareTo(Property o) {
String n1 = getItemDefinitionName(definition);
String n2 = getItemDefinitionName(o.definition);
if (n1 == null || n2 == null) {
return 0;
}
return String.CASE_INSENSITIVE_ORDER.compare(n1, n2);
}
private String getItemDefinitionName(ItemDefinition def) {
if (def == null) {
return null;
}
if (def.getDisplayName() != null) {
StringResourceModel nameModel = PageBase.createStringResourceStatic(null, def.getDisplayName());
if (StringUtils.isNotEmpty(nameModel.getString())) {
return nameModel.getString();
}
}
String name = def.getDisplayName(); // TODO this is always null here, isn't it?
if (StringUtils.isEmpty(name)) {
name = def.getName().getLocalPart();
}
return name;
}
}