/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.wizards.refactor.pages;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jubula.client.core.businessprocess.CalcTypes;
import org.eclipse.jubula.client.core.businessprocess.CompNamesBP;
import org.eclipse.jubula.client.core.businessprocess.IWritableComponentNameCache;
import org.eclipse.jubula.client.core.model.ICompNamesPairPO;
import org.eclipse.jubula.client.core.model.IExecTestCasePO;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.persistence.EditSupport;
import org.eclipse.jubula.client.ui.constants.ContextHelpIds;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.rcp.editors.AbstractJBEditor;
import org.eclipse.jubula.client.ui.rcp.editors.TestSuiteEditor;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.GeneralLabelProvider;
import org.eclipse.jubula.client.ui.rcp.widgets.ComponentNamesTableComposite;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.i18n.CompSystemI18n;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;
/**
* @author Markus Tiede
* @created Jul 25, 2011
*/
public class MatchComponentNamesPage extends WizardPage {
/**
* <code>m_editor</code> the currently active editor
*/
private final AbstractJBEditor m_editor;
/**
* <code>cntc</code> the new execs component names table composite
*/
private ComponentNamesTableComposite m_cntc;
/**
* <code>m_execTCList</code>
*/
private final List<INodePO> m_execTCList;
/**
* <code>m_parents</code> mapping
*/
private Map<ICompNamesPairPO, IExecTestCasePO> m_parents =
new HashMap<ICompNamesPairPO, IExecTestCasePO>();
/**
* @author Markus Tiede
* @created Aug 5, 2011
*/
public class MatchCompNamesPageTreeContentProvider implements
ITreeContentProvider {
/**
* <code>m_cnBP</code>
*/
private CompNamesBP m_cnBP = new CompNamesBP();
/** {@inheritDoc} */
public void dispose() {
m_parents.clear();
}
/** {@inheritDoc} */
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
m_parents.clear();
}
/** {@inheritDoc} */
public Object[] getElements(Object inputElement) {
return ((List)inputElement).toArray();
}
/** {@inheritDoc} */
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IExecTestCasePO) {
IExecTestCasePO execTC = (IExecTestCasePO)parentElement;
Collection<ICompNamesPairPO> compPairs =
m_cnBP.getAllCompNamesPairs(execTC);
if (compPairs.size() > 0) {
for (ICompNamesPairPO pair : compPairs) {
m_parents.put(pair, execTC);
}
return compPairs.toArray();
}
return new String[] { Messages.NoComponentNames };
}
return ArrayUtils.EMPTY_OBJECT_ARRAY;
}
/** {@inheritDoc} */
public Object getParent(Object element) {
return null;
}
/** {@inheritDoc} */
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
}
/**
* @author Markus Tiede
* @created Aug 5, 2011
*/
public class MatchCompNamesPageTreeLabelProvider
extends GeneralLabelProvider {
/** {@inheritDoc} */
public String getText(Object element) {
if (element instanceof ICompNamesPairPO) {
ICompNamesPairPO pair = (ICompNamesPairPO)element;
EditSupport supp = m_editor.getEditorHelper().getEditSupport();
IWritableComponentNameCache cache = m_editor.getCompNameCache();
StringBuilder sb = new StringBuilder(cache.getNameByGuid(
pair.getSecondName()));
if (StringUtils.isEmpty(pair.getType())) {
CalcTypes.recalculateCompNamePairs(cache,
(INodePO) supp.getWorkVersion());
}
sb.append(StringConstants.SPACE)
.append(StringConstants.LEFT_BRACKET)
.append(CompSystemI18n.getString(pair.getType()))
.append(StringConstants.RIGHT_BRACKET);
return sb.toString();
}
return super.getText(element);
}
/** {@inheritDoc} */
public Image getImage(Object element) {
if (element instanceof ICompNamesPairPO) {
if (((ICompNamesPairPO)element).isPropagated()) {
return IconConstants.PROPAGATED_LOGICAL_NAME_IMAGE;
}
return IconConstants.LOGICAL_NAME_IMAGE;
}
return super.getImage(element);
}
}
/**
* @param pageName
* the page name
* @param editor
* the current editor
* @param execTCList
* the node list to extract the component interface for
*/
public MatchComponentNamesPage(String pageName, AbstractJBEditor editor,
List<INodePO> execTCList) {
super(pageName, Messages.ReplaceTCRWizard_matchComponentNames_title,
null);
m_editor = editor;
m_execTCList = execTCList;
}
/** {@inheritDoc} */
public void createControl(Composite parent) {
SashForm sash = new SashForm(parent, SWT.HORIZONTAL);
sash.setLayout(new FillLayout(SWT.VERTICAL | SWT.HORIZONTAL));
Composite leftSashContent = new Composite(sash, SWT.NONE);
leftSashContent.setLayout(GridLayoutFactory.fillDefaults().create());
new Label(leftSashContent, SWT.NONE)
.setText(Messages.ReplaceTCRWizard_matchComponentNames_oldInterface);
TreeViewer tv = new TreeViewer(leftSashContent);
tv.setContentProvider(new MatchCompNamesPageTreeContentProvider());
tv.setLabelProvider(new MatchCompNamesPageTreeLabelProvider());
tv.setInput(m_execTCList);
tv.getTree().setLayoutData(
GridDataFactory.fillDefaults().grab(true, true).create());
tv.expandAll();
Composite rightSashContent = new Composite(sash, SWT.NONE);
rightSashContent.setLayout(GridLayoutFactory.fillDefaults().create());
new Label(rightSashContent, SWT.NONE)
.setText(Messages.ReplaceTCRWizard_matchComponentNames_newInterface);
m_cntc = new ComponentNamesTableComposite(rightSashContent, SWT.NONE);
m_cntc.setSelectedExecNodeOwner(m_editor);
if (m_editor instanceof TestSuiteEditor) {
m_cntc.controlPropagation(false);
}
sash.setWeights(new int[] { 1, 2 });
setControl(sash);
}
/**
* @param replacement the replacing exec node
*/
public void setSelectedExecNode(IExecTestCasePO replacement) {
m_cntc.setSelectedExecNode(replacement);
}
/** {@inheritDoc} */
public void performHelp() {
PlatformUI.getWorkbench().getHelpSystem().displayHelp(
ContextHelpIds.REFACTOR_REPLACE_MATCH_COMP_NAMES_WIZARD_PAGE);
}
}