/******************************************************************************* * 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.businessprocess; import java.util.List; import java.util.Set; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.window.Window; import org.eclipse.jubula.client.core.businessprocess.UsedToolkitBP; import org.eclipse.jubula.client.core.businessprocess.UsedToolkitBP.ToolkitPluginError; import org.eclipse.jubula.client.core.businessprocess.UsedToolkitBP.ToolkitPluginError.ERROR; import org.eclipse.jubula.client.core.events.DataChangedEvent; import org.eclipse.jubula.client.core.events.DataEventDispatcher; import org.eclipse.jubula.client.core.events.DataEventDispatcher.DataState; import org.eclipse.jubula.client.core.events.DataEventDispatcher.IDataChangedListener; import org.eclipse.jubula.client.core.events.DataEventDispatcher.IProjectLoadedListener; import org.eclipse.jubula.client.core.model.INodePO; import org.eclipse.jubula.client.core.model.IProjectPO; import org.eclipse.jubula.client.core.model.ISpecTestCasePO; import org.eclipse.jubula.client.core.model.IUsedToolkitPO; import org.eclipse.jubula.client.core.persistence.GeneralStorage; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil; import org.eclipse.jubula.toolkit.common.xml.businessprocess.ComponentBuilder; import org.eclipse.jubula.tools.internal.constants.StringConstants; import org.eclipse.jubula.tools.internal.exception.Assert; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; import org.eclipse.jubula.tools.internal.xml.businessmodell.ToolkitDescriptor; /** * Class to handle / control toolkit settings. * * @author BREDEX GmbH * @created 09.07.2007 */ public class ToolkitBP implements IProjectLoadedListener, IDataChangedListener { /** * The singleton instance */ private static ToolkitBP instance = null; /** * Constructor */ private ToolkitBP() { DataEventDispatcher ded = DataEventDispatcher.getInstance(); ded.addProjectLoadedListener(this, true); ded.addDataChangedListener(this, true); } /** * {@inheritDoc} */ public void handleProjectLoaded() { final IProjectPO project = GeneralStorage.getInstance().getProject(); if (project != null) { UsedToolkitBP.getInstance().getToolkitLevel(project); } } /** * * @return the singleton instance.s */ public static ToolkitBP getInstance() { if (instance == null) { instance = new ToolkitBP(); } return instance; } /** {@inheritDoc} */ public void handleDataChanged(DataChangedEvent... events) { for (DataChangedEvent e : events) { if (e.getPo() instanceof INodePO && (DataState.StructureModified == e.getDataState())) { final INodePO node = (INodePO)e.getPo(); if (e.getPo() instanceof ISpecTestCasePO) { UsedToolkitBP.getInstance().updateToolkitLevel( node, node.getToolkitLevel()); } } } } /** * Showing Info Message if loading old project * @param usedToolkits toolkits used in given project * @return true if project can be loaded, false otherwise. */ public boolean checkXMLVersion(Set<IUsedToolkitPO> usedToolkits) { final List<ToolkitPluginError> errors = UsedToolkitBP.getInstance() .checkUsedToolkitPluginVersions(usedToolkits); if (errors.isEmpty()) { return true; } boolean loadProject = true; Integer messageID = null; final StringBuilder strBuilder = new StringBuilder(); strBuilder.append(Messages.OpenProjectActionToolkitVersionConflict1); for (ToolkitPluginError error : errors) { String toolkitId = error.getToolkitId(); ToolkitDescriptor desc = ComponentBuilder.getInstance().getCompSystem() .getToolkitDescriptor(toolkitId); String toolkitName = desc != null ? desc.getName() : toolkitId; strBuilder.append(Messages.OpenProjectActionToolkitVersionConflict2) .append(toolkitName) .append(Messages.OpenProjectActionToolkitVersionConflict3); final ERROR errorType = error.getError(); final String descr = Messages.OpenProjectActionToolkitVersionConflict5; switch (errorType) { case MAJOR_VERSION_ERROR: messageID = MessageIDs .E_LOAD_PROJECT_TOOLKIT_MAJOR_VERSION_ERROR; strBuilder.append(Messages .OpenProjectActionToolkitVersionConflict4a); strBuilder.append(descr); loadProject = false; break; case MINOR_VERSION_HIGHER: messageID = MessageIDs .E_LOAD_PROJECT_TOOLKIT_MAJOR_VERSION_ERROR; strBuilder.append(Messages .OpenProjectActionToolkitVersionConflict4b); strBuilder.append(descr); loadProject = false; break; case MINOR_VERSION_LOWER: if (loadProject) { // do not overwrite if already false! messageID = MessageIDs .Q_LOAD_PROJECT_TOOLKIT_MINOR_VERSION_LOWER; } strBuilder.append(Messages .OpenProjectActionToolkitVersionConflict4c); break; default: Assert.notReached(Messages.UnknownErrorType + StringConstants.COLON + StringConstants.SPACE + String.valueOf(errorType)); } } String[] details = null; if (!messageID.equals(MessageIDs .Q_LOAD_PROJECT_TOOLKIT_MINOR_VERSION_LOWER)) { details = new String[]{strBuilder.toString()}; } final Dialog dialog = ErrorHandlingUtil.createMessageDialog( messageID, null, details); if (dialog.getReturnCode() == Window.CANCEL) { loadProject = false; } return loadProject; } }