Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.fatalix.bookery.view.admin; import com.vaadin.data.Property; import com.vaadin.server.FontAwesome; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.ComboBox; import com.vaadin.ui.CssLayout; import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.themes.ValoTheme; import de.fatalix.bookery.bl.background.BatchJobType; import de.fatalix.bookery.bl.model.BatchJobConfiguration; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.log4j.Logger; /** * * @author felix.husse */ public class BatchJobCard extends CssLayout { private final List<Listener> listeners = new ArrayList<>(); @Inject private Logger logger; @Inject private AdminPresenter presenter; private BatchJobConfiguration jobConfig; private Label captionLabel; private Label description; private Label nextRuntime; private ComboBox batchJobTypeCombo; private CheckBox batchJobActive; private TextField cronjobExpression; private TextField status; private TextArea batchJobConfiguration; private boolean noUpdate = false; @PostConstruct private void postInit() { addStyleName("bookery-content"); addComponents(createHeader(), createContent()); setWidth(380, Unit.PIXELS); //setHeight(240, Unit.PIXELS); } private HorizontalLayout createHeader() { captionLabel = new Label("some.batchjob"); Button deleteBatchJob = new Button(null, new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { presenter.deleteBatchJob(jobConfig); for (BatchJobCard.Listener listener : listeners) { listener.jobDeleted(BatchJobCard.this); } } }); deleteBatchJob.setIcon(FontAwesome.TIMES_CIRCLE); deleteBatchJob.addStyleName("borderless"); deleteBatchJob.addStyleName("icon-only"); HorizontalLayout captionLayout = new HorizontalLayout(); captionLayout.addStyleName("v-panel-caption"); captionLayout.setWidth("100%"); captionLayout.addComponents(captionLabel, deleteBatchJob); captionLayout.setExpandRatio(captionLabel, 1); return captionLayout; } private FormLayout createContent() { batchJobTypeCombo = new ComboBox("Batch Type"); for (BatchJobType type : BatchJobType.values()) { batchJobTypeCombo.addItem(type); } batchJobTypeCombo.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent event) { if (!noUpdate) { BatchJobType newType = ((BatchJobType) batchJobTypeCombo.getValue()); batchJobConfiguration.setValue(newType.getDefaultConfig()); updateBean(); setFields(); } } }); description = new Label("description"); nextRuntime = new Label("---"); batchJobActive = new CheckBox("active", false); cronjobExpression = new TextField("Cronjob", "*******"); status = new TextField("Status", "-"); batchJobConfiguration = new TextArea("Configuration"); Button updateButton = new Button("update", new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { updateBean(); jobConfig = presenter.updateBatchJob(jobConfig); setFields(); logger.debug("Updated Batch Job..."); } }); updateButton.addStyleName(ValoTheme.BUTTON_FRIENDLY); FormLayout batchJobCardContent = new FormLayout(batchJobTypeCombo, description, cronjobExpression, batchJobActive, batchJobConfiguration, nextRuntime, status, updateButton); batchJobCardContent.addStyleName(ValoTheme.FORMLAYOUT_LIGHT); batchJobCardContent.setMargin(true); return batchJobCardContent; } public void load(BatchJobConfiguration jobConfig) { this.jobConfig = jobConfig; setFields(); } private void updateBean() { jobConfig.setType((BatchJobType) batchJobTypeCombo.getValue()); jobConfig.setCronJobExpression(cronjobExpression.getValue()); jobConfig.setActive(batchJobActive.getValue()); jobConfig.setConfigurationXML(batchJobConfiguration.getValue()); } private void setFields() { noUpdate = true; captionLabel.setValue(jobConfig.getType().getDisplayName()); batchJobTypeCombo.setValue(jobConfig.getType()); description.setValue(jobConfig.getType().getDescription()); cronjobExpression.setValue(jobConfig.getCronJobExpression()); if (jobConfig.getNextTimeout() == null) { nextRuntime.setValue("---"); } else { nextRuntime.setValue(jobConfig.getNextTimeout().toString()); } batchJobConfiguration.setValue(jobConfig.getConfigurationXML()); batchJobActive.setValue(jobConfig.isActive()); status.setValue(jobConfig.getStatus()); noUpdate = false; } public void addBatchJobCardListener(BatchJobCard.Listener listener) { listeners.add(listener); } public interface Listener { void jobDeleted(BatchJobCard batchJobCard); } }