/* * Copyright (c) 2015 Felix Husse under MIT License * see LICENSE file */ package de.fatalix.bookery.view.admin; import com.vaadin.event.FieldEvents; import com.vaadin.server.FontAwesome; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.AbstractTextField; import com.vaadin.ui.Button; import com.vaadin.ui.FormLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; import de.fatalix.bookery.bl.model.AppSetting; import de.fatalix.bookery.bl.model.SettingKey; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrServerException; /** * * @author Fatalix */ public class ServerSettingsLayout extends VerticalLayout implements FieldEvents.BlurListener { @Inject private Logger logger; @Inject private AdminPresenter presenter; private FormLayout formLayout; private List<AbstractTextField> fields; private List<Label> statusFields; @PostConstruct private void postInit() { addStyleName("bookery-content"); formLayout = new FormLayout(); formLayout.addStyleName("light"); formLayout.addComponents(generateFields()); formLayout.addComponents(generateStatusFields()); Button checkSolr = new Button("check", new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { checkSolr(); } }); checkSolr.addStyleName(ValoTheme.BUTTON_SMALL); checkSolr.addStyleName(ValoTheme.BUTTON_FRIENDLY); formLayout.addComponent(checkSolr); Label titleLabel = new Label("General Settings"); titleLabel.addStyleName(ValoTheme.LABEL_H2); addComponents(titleLabel, formLayout); } private AbstractTextField[] generateFields() { fields = new ArrayList<>(); for(SettingKey key : SettingKey.values()) { AbstractTextField field = new TextField(key.getName()); field.setColumns(25); field.setId(key.getKey()); field.addBlurListener(this); fields.add(field); } AbstractTextField[] result = new AbstractTextField[fields.size()]; return fields.toArray(result); } private Label[] generateStatusFields() { statusFields = new ArrayList<>(); Label solrStatus = new Label("Offline " + FontAwesome.TIMES_CIRCLE.getHtml(), ContentMode.HTML); solrStatus.addStyleName("red-icon"); solrStatus.setCaption("Status"); statusFields.add(solrStatus); Label numberOfDocs = new Label("100"); numberOfDocs.setCaption("Library"); statusFields.add(numberOfDocs); Label sizeOnDisk = new Label("73MB"); sizeOnDisk.setCaption("Size"); statusFields.add(sizeOnDisk); Label[] result = new Label[statusFields.size()]; return statusFields.toArray(result); } public void loadData() { for(AbstractTextField field : fields) { SettingKey key = SettingKey.getEnumByKey(field.getId()); AppSetting setting = presenter.loadSetting(key); field.setValue(setting.getConfigurationValue()); } checkSolr(); } @Override public void blur(FieldEvents.BlurEvent event) { SettingKey key = SettingKey.getEnumByKey(event.getComponent().getId()); for(AbstractTextField field : fields) { if(field.getId().equals(key.getKey())) { presenter.updateSetting(key, field.getValue()); break; } } } private void checkSolr() { try { long numDocs = presenter.getSolrInfo(); for(Label label : statusFields) { if(label.getCaption().equals("Status")) { label.setValue("Online " + FontAwesome.CHECK_CIRCLE.getHtml()); label.removeStyleName("red-icon"); label.addStyleName("green-icon"); } else if(label.getCaption().equals("Library")) { label.setValue(numDocs + " Books"); } } } catch(SolrServerException | IOException ex) { logger.error(ex, ex); for(Label label : statusFields) { if(label.getCaption().equals("Status")) { label.setValue(ex.getLocalizedMessage() + " " + FontAwesome.CHECK_CIRCLE.getHtml()); label.addStyleName("red-icon"); label.removeStyleName("green-icon"); } else if(label.getCaption().equals("Num Docs")) { label.setValue("NA"); } } } } }