/*******************************************************************************
* 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.search.query;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jubula.client.core.model.IExecTestCasePO;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.model.IProjectPO;
import org.eclipse.jubula.client.core.model.IReusedProjectPO;
import org.eclipse.jubula.client.core.model.ISpecTestCasePO;
import org.eclipse.jubula.client.core.persistence.GeneralStorage;
import org.eclipse.jubula.client.core.persistence.NodePM;
import org.eclipse.jubula.client.core.persistence.ProjectPM;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.search.result.BasicSearchResult.SearchResultElement;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.exception.JBException;
/**
* @author BREDEX GmbH
* @created Jul 27, 2010
*/
public class ShowWhereUsedSpecTcQuery
extends AbstractShowWhereUsedQuery {
/**
* <code>m_specTC</code>
*/
private ISpecTestCasePO m_specTC;
/**
* @param specTC
* the spec tc to search the reuse for
*/
public ShowWhereUsedSpecTcQuery(ISpecTestCasePO specTC) {
super(null);
m_specTC = specTC;
}
/**
* {@inheritDoc}
*/
public IStatus run(IProgressMonitor monitor) {
calculateReuseOfSpecTestCase(m_specTC, monitor);
return Status.OK_STATUS;
}
/**
* calculates and show the places of reuse for a spectestcase
*
* @param specTC
* ISpecTestCasePO
* @param monitor
* the progress monitor
*/
private void calculateReuseOfSpecTestCase(ISpecTestCasePO specTC,
IProgressMonitor monitor) {
IProjectPO currentProject = GeneralStorage.getInstance().getProject();
List<Long> parentProjectIDs = new LinkedList<Long>();
parentProjectIDs.add(currentProject.getId());
for (IReusedProjectPO rp : currentProject.getUsedProjects()) {
try {
Long projID = ProjectPM.findProjectId(rp.getProjectGuid(), rp
.getMajorNumber(), rp.getMinorNumber(),
rp.getMicroNumber(), rp.getVersionQualifier());
if (projID != null) {
parentProjectIDs.add(projID);
}
} catch (JBException e) {
// ignore
}
}
List<IExecTestCasePO> reuseList =
NodePM.getExecTestCases(specTC.getGuid(), parentProjectIDs);
INodePO[] reuse = new INodePO[reuseList.size()];
reuseList.toArray(reuse);
monitor.beginTask("Searching for reusage of Test Case", reuseList.size()); //$NON-NLS-1$
final List<SearchResultElement> reuseLoc = getResultElementsFromNodes(
monitor, reuse);
setSearchResult(reuseLoc);
monitor.done();
}
/**
* {@inheritDoc}
*/
public String getLabel() {
StringBuilder sb = new StringBuilder();
sb.append(getTimestamp());
sb.append(StringConstants.COLON);
sb.append(StringConstants.SPACE);
sb.append(Messages.UIJobSearchingTestCases);
sb.append(" \""); //$NON-NLS-1$
sb.append(m_specTC.getName());
sb.append("\""); //$NON-NLS-1$
return sb.toString();
}
}