/******************************************************************************* * Copyright (c) 2010 SAP AG. * 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: * Emil Simeonov - initial API and implementation. * Dimitar Donchev - initial API and implementation. * Dimitar Tenev - initial API and implementation. * Nevena Manova - initial API and implementation. * Georgi Konstantinov - initial API and implementation. *******************************************************************************/ package org.eclipse.wst.sse.sieditor.ui.v2.dt.extractwizard.utils; import java.text.MessageFormat; import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.wst.sse.sieditor.command.emf.wsdl.extract.dependencies.SchemaNode; import org.eclipse.wst.sse.sieditor.ui.Activator; import org.eclipse.wst.sse.sieditor.ui.i18n.Messages; public class WizardPageValidationUtils { private static final WizardPageValidationUtils INSTANCE = new WizardPageValidationUtils(); private WizardPageValidationUtils() { } public static WizardPageValidationUtils instance() { return INSTANCE; } public IStatus validateSchemaFilenames(final Collection<SchemaNode> nodes) { final Map<String, Boolean> filenamesMap = new TreeMap<String, Boolean>(); for (final SchemaNode dependency : nodes) { IStatus validationStatus = validateSchemaDependencyFileExistence(dependency); if (!validationStatus.isOK()) { return validationStatus; } validationStatus = validateFilenameNotDuplicate(filenamesMap, dependency); if (!validationStatus.isOK()) { return validationStatus; } filenamesMap.put(dependency.getFilename(), Boolean.TRUE); } return Status.OK_STATUS; } private IStatus validateFilenameNotDuplicate(final Map<String, Boolean> filenamesMap, final SchemaNode dependency) { if (!dependency.getFilename().isEmpty() && filenamesMap.containsKey(dependency.getFilename())) { return new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.WizardPageValidationUtils_duplicate_target_filenames_error_msg); } return Status.OK_STATUS; } public IStatus validateSchemaDependencyFileExistence(final SchemaNode schemaNode) { if (schemaNode.getIFile().exists()) { return new Status(Status.ERROR, Activator.PLUGIN_ID, MessageFormat.format( Messages.WizardPageValidationUtils_file_X_already_exists_error_msg, schemaNode.getIFile().getFullPath())); } return Status.OK_STATUS; } public IStatus validateSchemaDependencyNodes(final Set<SchemaNode> dependenciesSet) { for (final SchemaNode dependency : dependenciesSet) { final IStatus status = validateSchemaDependencyNode(dependency, true); if (!status.isOK()) { return status; } } return Status.OK_STATUS; } public IStatus validateSchemaDependencyNode(final SchemaNode node, final boolean checkIfInCurrentFolder) { final String filename = node.getFilename(); boolean fileNameValid = filename != null && !filename.isEmpty(); if (fileNameValid && checkIfInCurrentFolder) { fileNameValid &= (filename.indexOf('\\') == -1 && filename.indexOf('/') == -1); } final String fullPathString = node.getFullPath().toString(); final boolean pathEndsWithSeparator = fullPathString.endsWith("\\") || fullPathString.endsWith("/"); //$NON-NLS-1$//$NON-NLS-2$ final boolean isPathValid = node.getFullPath().isValidPath(fullPathString); if (!fileNameValid || !isPathValid || pathEndsWithSeparator) { return new Status(Status.ERROR, Activator.PLUGIN_ID, MessageFormat.format( Messages.WizardPageValidationUtils_filename_X_invalid_error_msg, filename)); } return Status.OK_STATUS; } }