I am creating a list from which the user can select from using Vaadin8. I want to get the values from the Enum but the string values with spaces not the Element Names.
JavaScript
x
public enum CustomerStatus {
ImportedLead {
public String toString() {
return "Imported Lead";
}
},
NotContacted{
public String toString() {
return "Not Contacted";
}
},
Contacted{
public String toString() {
return "Contacted";
}
},
Customer{
public String toString() {
return "Customer";
}
},
ClosedLost{
public String toString() {
return "Closed Lost";
}
}
}
Here is the list created to select from the Enum elements:
JavaScript
private NativeSelect <CustomerStatus> status = new NativeSelect<>("Status");
And here are 3 lines I tried that did not work:
JavaScript
status.setItems(CustomerStatus.values().toString());
//
status.setItems(CustomerStatus.valueOf(CustomerStatus.values()));
//
status.setItems(CustomerStatus.ClosedLost.toString(), CustomerStatus.Contacted.toString() , CustomerStatus.Customer, CustomerStatus.NotContacted, CustomerStatus.ImportedLead);
//
Advertisement
Answer
You can add a value
property:
JavaScript
public enum CustomerStatus {
ImportedLead("Imported Lead"),
NotContacted("Not Contacted"),
Contacted("Contacted"),
Customer("Customer"),
ClosedLost("Closed Lost");
private final String value;
CustomerStatus(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
public static CustomerStatus fromValue(String value) {
CustomerStatus result = null;
switch(value) {
case "Imported Lead":
result = CustomerStatus.ImportedLead;
break;
case "Not Contacted":
result = CustomerStatus.NotContacted;
break;
case "Contacted":
result = CustomerStatus.Contacted;
break;
case "Customer":
result = CustomerStatus.Customer;
break;
case "Closed Lost":
result = CustomerStatus.ClosedLost;
break;
}
if (result == null) {
throw new IllegalArgumentException("Provided value is not valid!");
}
return result;
}
}
Usage:
JavaScript
status.setItems(Arrays.asList(CustomerStatus.values()));