Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.usergrid.chop.webapp.view.runner; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import com.vaadin.ui.Accordion; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Table; import org.apache.commons.lang.StringUtils; import org.apache.usergrid.chop.api.Module; import org.apache.usergrid.chop.api.Runner; import org.apache.usergrid.chop.api.State; import org.apache.usergrid.chop.api.StatsSnapshot; import org.apache.usergrid.chop.webapp.dao.ModuleDao; import org.apache.usergrid.chop.webapp.dao.RunnerDao; import org.apache.usergrid.chop.webapp.dao.model.RunnerGroup; import org.apache.usergrid.chop.webapp.service.InjectorFactory; import org.apache.usergrid.chop.webapp.service.runner.RunnerService; import org.apache.usergrid.chop.webapp.service.runner.RunnerServiceImpl; public class RunnersLayout extends VerticalLayout { private static final DateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss"); private final RunnerDao runnerDao = InjectorFactory.getInstance(RunnerDao.class); private final ModuleDao moduleDao = InjectorFactory.getInstance(ModuleDao.class); // Use RunnerServiceMock for testing private final RunnerService runnerService = InjectorFactory.getInstance(RunnerServiceImpl.class); private final Accordion accordion = new Accordion(); public RunnersLayout() { addItems(); loadData(); } private void addItems() { addAccordion(); addRefreshButton(); } private void addRefreshButton() { Button button = new Button("Refresh"); button.setWidth("100px"); button.addClickListener(new Button.ClickListener() { public void buttonClick(Button.ClickEvent event) { loadData(); } }); addComponent(button); this.setComponentAlignment(button, Alignment.BOTTOM_CENTER); } private void addAccordion() { accordion.setWidth("800px"); accordion.setHeight("530px"); addComponent(accordion); this.setComponentAlignment(accordion, Alignment.MIDDLE_CENTER); } private void loadData() { accordion.removeAllComponents(); Map<RunnerGroup, List<Runner>> runnerGroups = runnerDao.getRunnersGrouped(); for (RunnerGroup group : runnerGroups.keySet()) { Table table = getRunnersTable(runnerGroups.get(group)); addGroup(group, table); } } private Table getRunnersTable(List<Runner> runners) { Table table = getTable(); for (Runner runner : runners) { addRunnerToTable(table, runner); } return table; } private void addRunnerToTable(Table table, Runner runner) { State state = runnerService.getState(runner); StatsSnapshot stats = state == State.RUNNING ? runnerService.getStats(runner) : null; String percentageComplete = stats != null ? stats.getPercentageComplete() + "%" : ""; String startTime = stats != null ? DATE_FORMAT.format(new Date(stats.getStartTime())) : ""; Object[] cells = new Object[] { runner.getUrl(), state.toString(), percentageComplete, startTime }; table.addItem(cells, runner.getUrl()); } private void addGroup(RunnerGroup group, Table runnersTable) { Module module = moduleDao.get(group.getModuleId()); if (module == null) { return; } String caption = String.format("%s / %s / %s: commit[%s], user[%s]", module.getGroupId(), module.getArtifactId(), module.getVersion(), StringUtils.abbreviate(group.getCommitId(), 10), group.getUser()); accordion.addTab(runnersTable, caption); } private static Table getTable() { Table table = new Table(); table.setSizeFull(); table.addContainerProperty("URL", String.class, null); table.addContainerProperty("State", String.class, null); table.addContainerProperty("Complete %", String.class, null); table.addContainerProperty("Start Time", String.class, null); return table; } }