0

AbstractField

asked 2015-03-20 12:54:16 +0800

Kipill gravatar image Kipill
1

Hi I make a custom field extended AbstractField. My field contains Combobox and Radiogroup. I want to each component displayed on a new line, but my components distlayed on one line. My code:

public class FieldContractor extends AbstractField {

private transient static final Logger LOG = LoggerFactory.getLogger(FieldContractor.class);

@WireVariable
private UserService<User, Group> userService;
@WireVariable
private ExternalSourcesService externalSourcesService;

private Combobox _combo;
private Radiogroup _radiogroup;

public FieldContractor() {
    super();
    initRadiogroup();
    initCombobox();
}

private void initRadiogroup() {
    Hbox row = new Hbox();
    row.setHflex(DEFAULT_HFLEX);
    //row.setParent(getBox());
    _radiogroup = new Radiogroup();
    for (TypeSource type : TypeSource.values()) {
        Radio item = new Radio(type.getTitle());
        item.setValue(type);
        item.setHflex(DEFAULT_WIDTH);
        _radiogroup.appendChild(item);
    }
    _radiogroup.setHflex(DEFAULT_WIDTH);
    _radiogroup.setParent(row);
    setRariogroupValue(null);
}

private void initCombobox() {
    Hbox row = new Hbox();
    row.setHflex(DEFAULT_HFLEX);
    //row.setParent(getBox());
    _combo = new Combobox();
    _combo.setHflex(DEFAULT_WIDTH);
    _combo.setAutodrop(true);
    _combo.setAutocomplete(true);
    _combo.setButtonVisible(true);
    loadModel();
    _combo.setParent(row);
}

public TypeSource getRadiogroupValue() {
    return _radiogroup.getSelectedItem().getValue();
}

private void loadModel() {
    if (getRadiogroupValue().equals(TypeSource.External)) {
        loadExternalModel();
    } else if (getRadiogroupValue().equals(TypeSource.Internal)) {
        loadInternalModel();
    }
}

private void loadInternalModel() {
    List<String> fullName = userService.getAllFullName();
    SimpleListModel<String> modelList = new SimpleListModel<>(fullName);
    _combo.setModel(modelList);
}

private void loadExternalModel() {
    List<ExternalSource> listSource = externalSourcesService.getAll();
    SimpleListModel<ExternalSource> modelList = new SimpleListModel<>(listSource);
    _combo.setModel(modelList);
}

@Override
public Object getRawValue() {
    return null;
}

public ExternalSource getExternalSource() {
    if (getRadiogroupValue().equals(TypeSource.Internal)) {
        return null;
    } else {
        return externalSourcesService.get(_combo.getValue().trim());
    }
}

public User getInternalSource() {
    if (getRadiogroupValue().equals(TypeSource.External)) {
        return null;
    } else {
        String fullName = _combo.getValue().trim();
        final User user = userService.get(fullName);
        return user;
    }
}

@Override
public void setRawValue(Object obj) {
    if(obj==null){
        return;
    }
    if (obj instanceof TypeSource) {
        setRariogroupValue((TypeSource) obj);
    } else if (obj instanceof User) {
        setInternalValue((User) obj);
    } else if(obj instanceof ExternalSource){
        setExternalValue((ExternalSource)obj);
    }
}

private void setRariogroupValue(TypeSource typeSource) {
    if (typeSource == null) {
        if (_radiogroup.getItemCount() < 1) {
            return;
        }
        _radiogroup.setSelectedIndex(0);
        return;
    }
    _radiogroup.setSelectedItem(_radiogroup.getItemAtIndex(typeSource.ordinal()));
    loadModel();
}

private void setInternalValue(User user) {
    if (getRadiogroupValue().equals(TypeSource.External)) {
        return;
    }else{
        _combo.setValue(user.getFullName());
    }
}

private void setExternalValue(ExternalSource externalSource) {
    if (getRadiogroupValue().equals(TypeSource.Internal)) {
        return;
    }else{
        _combo.setValue(externalSource.getTitle());
    }
}

Please tell me where I have made a mistake.

Thanks in advance. Kirill.

delete flag offensive retag edit

Comments

You need each radiobutton under each other?

chillworld ( 2015-03-20 14:59:12 +0800 )edit

No, this code is my experiment whis my code/

I solved this problem. I redefine metod initBox().

@Override
protected HtmlBasedComponent initBox() {
    return new Vlayout();
}
Kipill ( 2015-03-21 11:20:55 +0800 )edit
Be the first one to answer this question!
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow
1 follower

RSS

Stats

Asked: 2015-03-20 12:54:16 +0800

Seen: 7 times

Last updated: Mar 20 '15

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More