/* Licensed 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.activiti.explorer.ui.management.db; import org.activiti.engine.ManagementService; import org.activiti.engine.ProcessEngines; import org.activiti.engine.management.TableMetaData; import org.activiti.explorer.ExplorerApp; import org.activiti.explorer.I18nManager; import org.activiti.explorer.Messages; import org.activiti.explorer.data.LazyLoadingContainer; import org.activiti.explorer.data.LazyLoadingQuery; import org.activiti.explorer.ui.Images; import org.activiti.explorer.ui.custom.DetailPanel; import org.activiti.explorer.ui.mainlayout.ExplorerLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Embedded; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Table; import com.vaadin.ui.themes.Reindeer; /** * @author Joram Barrez */ public class DatabaseDetailPanel extends DetailPanel { private static final long serialVersionUID = 1L; protected ManagementService managementService; protected I18nManager i18nManager; protected String tableName; public DatabaseDetailPanel(String tableName) { this.tableName = tableName; this.managementService = ProcessEngines.getDefaultProcessEngine().getManagementService(); this.i18nManager = ExplorerApp.get().getI18nManager(); addStyleName(Reindeer.LAYOUT_WHITE); setSizeFull(); addTableName(); addTableData(); } protected void addTableName() { HorizontalLayout header = new HorizontalLayout(); header.setWidth(100, UNITS_PERCENTAGE); header.addStyleName(ExplorerLayout.STYLE_TITLE_BLOCK); header.setSpacing(true); // TODO: use right image Embedded image = new Embedded(null, Images.DATABASE_50); header.addComponent(image); header.setComponentAlignment(image, Alignment.MIDDLE_LEFT); header.setMargin(false, false, true, false); Label name = new Label(tableName); name.addStyleName(Reindeer.LABEL_H2); header.addComponent(name); header.setExpandRatio(name, 1.0f); header.setComponentAlignment(name, Alignment.MIDDLE_LEFT); addDetailComponent(header); Label spacer = new Label(); spacer.setWidth(100, UNITS_PERCENTAGE); spacer.addStyleName(ExplorerLayout.STYLE_DETAIL_BLOCK); addDetailComponent(spacer); } protected void addTableData() { LazyLoadingQuery lazyLoadingQuery = new TableDataQuery(tableName, managementService); LazyLoadingContainer lazyLoadingContainer = new LazyLoadingContainer(lazyLoadingQuery, 10); if (lazyLoadingContainer.size() > 0) { Table data = new Table(); data.setContainerDataSource(lazyLoadingContainer); data.setEditable(false); data.setSelectable(true); data.setColumnReorderingAllowed(true); if (lazyLoadingQuery.size() < 10) { data.setPageLength(0); } else { data.setPageLength(10); } addDetailComponent(data); data.setWidth(100, UNITS_PERCENTAGE); data.setHeight(100, UNITS_PERCENTAGE); data.addStyleName(ExplorerLayout.STYLE_DATABASE_TABLE); setDetailExpandRatio(data, 1.0f); // Create column headers TableMetaData metaData = managementService.getTableMetaData(tableName); for (String columnName : metaData.getColumnNames()) { data.addContainerProperty(columnName, String.class, null); } } else { Label noDataLabel = new Label(i18nManager.getMessage(Messages.DATABASE_NO_ROWS)); noDataLabel.addStyleName(Reindeer.LABEL_SMALL); addDetailComponent(noDataLabel); setDetailExpandRatio(noDataLabel, 1.0f); } } }