Java tutorial
/******************************************************************************* * Copyright (c) 2014 Salesforce.com, inc.. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Salesforce.com, inc. - initial API and implementation ******************************************************************************/ package com.salesforce.ide.deployment.ui.wizards; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.resource.FontRegistry; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import com.salesforce.ide.core.internal.utils.Constants; import com.salesforce.ide.core.internal.utils.Utils; import com.salesforce.ide.deployment.internal.DeploymentComponent; import com.salesforce.ide.deployment.internal.DeploymentComponentSet; import com.salesforce.ide.deployment.internal.DeploymentComponentSorter; import com.salesforce.ide.deployment.internal.DeploymentPayload; import com.salesforce.ide.deployment.internal.utils.DeploymentMessages; public class DeploymentPlanComposite extends BaseDeploymentComposite { private static final Logger logger = Logger.getLogger(DeploymentPlanComposite.class); public final static int ACTION_COLUMN = 0; public final static int NAME_COLUMN = 1; public final static int PACKAGE_COLUMN = 2; public final static int TYPE_COLUMN = 3; protected Label lblSummary; private Table tblDeployPlan; private Button btnSelectAll; private Button btnDeselectAll; private Button btnRefresh; private Label lblActionTooltip; protected Button btnTestRun; protected CheckboxTableViewer tblViewer; private Label lblTestDeployment; private Label lblByClickingNext; private final DeploymentPlanPage deploymentPlanPage; public DeploymentPlanComposite(Composite parent, int style, DeploymentPlanPage deploymentPlanPage) { super(parent, style); this.deploymentPlanPage = deploymentPlanPage; initialize(); } class ColumnData { ColumnData(Integer sortOrder) { this.sortOrder = sortOrder; } Integer sortOrder; boolean ascending = true; public void toggleOrderSwith() { ascending = !ascending; } } private void initialize() { setLayout(new GridLayout(5, false)); lblSummary = new Label(this, SWT.NONE); lblSummary.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); // set count value after table has been loaded lblSummary.setText("Found (0) deployment candidates"); tblDeployPlan = new Table(this, SWT.BORDER | SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION); tblDeployPlan.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 5, 15)); tblDeployPlan.setLinesVisible(true); tblDeployPlan.setHeaderVisible(true); tblViewer = new CheckboxTableViewer(tblDeployPlan); tblViewer.setContentProvider(new DeploymentPlanContentProvider()); tblViewer.setLabelProvider(new DeploymentPlanLabelProvider()); tblViewer.addCheckStateListener(new DeploymentPlanCheckStateListener(deploymentPlanPage)); Listener sortListener = new DeploymentPlanColumnSortListener(this); final TableColumn colActionSelect = new TableColumn(tblDeployPlan, SWT.NONE); colActionSelect.setWidth(100); colActionSelect.setText("Apply Action?"); colActionSelect.setAlignment(SWT.CENTER); colActionSelect.setData(new ColumnData(DeploymentComponentSorter.SORT_ACTION)); colActionSelect.addListener(SWT.Selection, sortListener); final TableColumn colComponentName = new TableColumn(tblDeployPlan, SWT.NONE); colComponentName.setWidth(150); colComponentName.setText("Name"); colComponentName.setData(new ColumnData(DeploymentComponentSorter.SORT_NAME)); colComponentName.addListener(SWT.Selection, sortListener); final TableColumn colPackageName = new TableColumn(tblDeployPlan, SWT.NONE); colPackageName.setWidth(100); colPackageName.setText("Package"); colPackageName.setData(new ColumnData(DeploymentComponentSorter.SORT_PACKAGE_NAME)); colPackageName.addListener(SWT.Selection, sortListener); final TableColumn colComponentType = new TableColumn(tblDeployPlan, SWT.NONE); colComponentType.setWidth(75); colComponentType.setText("Type"); colComponentType.setData(new ColumnData(DeploymentComponentSorter.SORT_TYPE)); colComponentType.addListener(SWT.Selection, sortListener); btnSelectAll = new Button(this, SWT.NONE); btnSelectAll.setText("Select All"); btnSelectAll.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1)); btnSelectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tblViewer.setAllChecked(true); btnTestRun.setEnabled(true); deploymentPlanPage.setDeploySelectionForAll(true); deploymentPlanPage.setEnableNext(true); } }); btnDeselectAll = new Button(this, SWT.NONE); btnDeselectAll.setText("Deselect All"); btnDeselectAll.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1)); btnDeselectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tblViewer.setAllChecked(false); btnTestRun.setEnabled(false); deploymentPlanPage.setDeploySelectionForAll(false); deploymentPlanPage.setEnableNext(false); } }); btnRefresh = new Button(this, SWT.NONE); btnRefresh.setText("Refresh Plan"); btnRefresh.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 1, 1)); btnRefresh.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { deploymentPlanPage.reloadDeploymentView(); } }); lblActionTooltip = new Label(this, SWT.WRAP); lblActionTooltip.setText("Click on row for description"); lblActionTooltip.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false, 1, 1)); Label filler1 = new Label(this, SWT.NONE); filler1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); Label separator = new Label(this, SWT.HORIZONTAL | SWT.SEPARATOR); separator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); lblTestDeployment = new Label(this, SWT.WRAP); lblTestDeployment.setText( DeploymentMessages.getString("DeploymentWizard..DeploymentPlanComposite.Validate.message")); lblTestDeployment.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); btnTestRun = new Button(this, SWT.NONE); btnTestRun.setText("Validate Deployment"); btnTestRun.setLayoutData(new GridData(SWT.BEGINNING, 0, true, false, 5, 0)); btnTestRun.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { deploymentPlanPage.testDeployment(); } }); Label filler16 = new Label(this, SWT.NONE); filler16.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); Label filler161 = new Label(this, SWT.NONE); filler161.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 5, 0)); lblByClickingNext = new Label(this, SWT.NONE); lblByClickingNext.setText(DeploymentMessages.getString("DeploymentWizard.ReviewComposite.Next.label")); lblByClickingNext.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false, 5, 0)); } public Table getTblDeployPlan() { return tblDeployPlan; } public DeploymentPlanPage getDeploymentPlanPage() { return deploymentPlanPage; } public void setButtonEnablement(boolean enable) { btnDeselectAll.setEnabled(enable); btnSelectAll.setEnabled(enable); btnRefresh.setEnabled(enable); btnTestRun.setEnabled(enable); } public Button getBtnDeselectAll() { return btnDeselectAll; } public void setBtnDeselectAll(Button btnDeselectAll) { this.btnDeselectAll = btnDeselectAll; } public Button getBtnSelectAll() { return btnSelectAll; } public void setBtnSelectAll(Button btnSelectAll) { this.btnSelectAll = btnSelectAll; } public Button getBtnRefresh() { return btnRefresh; } public Button getBtnTestRun() { return btnTestRun; } public void setBtnTestRun(Button btnTestRun) { this.btnTestRun = btnTestRun; } public Label getLblActionTooltip() { return lblActionTooltip; } public void setLblActionTooltip(Label lblActionTooltip) { this.lblActionTooltip = lblActionTooltip; } public void resetLblActionTooltip(String txt) { setLblActionTooltipText(txt); lblActionTooltip.setLayoutData(new GridData(SWT.END, SWT.CENTER, true, false, 1, 2)); layout(); } public void setLblActionTooltipText(String txt) { this.lblActionTooltip.setText(txt); } public Table getTable() { return tblDeployPlan; } public void setTable(Table table) { this.tblDeployPlan = table; } public void updateSummaryLabel(int candidateCnt, String orgUserName) { if (lblSummary != null) { lblSummary.setText("Found " + candidateCnt + " deployment candidates"); FontRegistry registry = new FontRegistry(); Font boldFont = registry.getBold(Display.getCurrent().getSystemFont().getFontData()[0].getName()); lblSummary.setFont(boldFont); lblSummary.update(); } } public void clearSummaryLabel() { if (lblSummary != null) { lblSummary.setText(""); lblSummary.update(); } } class DeploymentPlanContentProvider implements IStructuredContentProvider { private Integer sortOrder = DeploymentComponentSorter.SORT_ACTION; public DeploymentPlanContentProvider() { } public DeploymentPlanContentProvider(Integer sortOrder) { this.sortOrder = sortOrder; } public void setSortOrder(Integer sortOrder) { this.sortOrder = sortOrder; } public Object[] getElements(Object inputElement) { DeploymentPayload tmpDeploymentPayload = (DeploymentPayload) inputElement; DeploymentComponentSet deploymentComponentSet = tmpDeploymentPayload.getDeploymentComponents(); if (Utils.isEmpty(deploymentComponentSet)) { logger.warn("Unable to provide table content -deployment candidates are null or empty"); return null; } if (logger.isDebugEnabled()) { logger.debug("Preparing deployment payload for table"); } deploymentComponentSet = deploymentComponentSet.getDeploymentComponentSetWithoutMetadata(); updateSummaryLabel(deploymentComponentSet.size(), tmpDeploymentPayload.getDestinationOrgUsername()); if (Utils.isEmpty(deploymentComponentSet)) { return null; } deploymentComponentSet = deploymentComponentSet.sort(sortOrder); return deploymentComponentSet.toArray(); } public void dispose() { // not implemented } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // not implemented } } class DeploymentPlanLabelProvider implements ITableLabelProvider { List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>(); // TODO: when we get action images public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { DeploymentComponent deploymentComponent = (DeploymentComponent) element; switch (columnIndex) { case ACTION_COLUMN: return deploymentComponent.getDestinationSummary().getAction(); case NAME_COLUMN: return deploymentComponent.getNameWithFolder(); case PACKAGE_COLUMN: String packageName = deploymentComponent.getComponent().getPackageName(); // show "" for unpackaged content if (Utils.isNotEmpty(packageName) && Constants.DEFAULT_PACKAGED_NAME.equals(packageName)) { packageName = Constants.EMPTY_STRING; } return packageName; case TYPE_COLUMN: return deploymentComponent.getComponent().getDisplayName(); } return ""; } public void addListener(ILabelProviderListener listener) { listeners.add(listener); } public void dispose() { // not implemented } public boolean isLabelProperty(Object element, String property) { // not implemented return false; } public void removeListener(ILabelProviderListener listener) { listeners.remove(listener); } } public CheckboxTableViewer getTblViewer() { return tblViewer; } }