blob: 0b77fd725cabd0dc12f2f84514cc726e24758d07 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.edit.validation.internal;
import java.io.File;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.edit.IFilter;
import org.eclipse.epf.library.edit.LibraryEditResources;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.edit.validation.NameChecker;
import org.eclipse.epf.services.IFileBasedLibraryPersister;
import org.eclipse.epf.services.Services;
import org.eclipse.epf.uma.ContentDescription;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.Section;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.util.ContentDescriptionFactory;
import org.eclipse.epf.uma.util.UmaUtil;
import org.eclipse.osgi.util.NLS;
/**
* Name validator for ContentElement.
*
* @author Phong Nguyen Le
* @author Kelvin Low
* @since 1.0
*/
public class ContentElementNameValidator extends UniquenessValidator {
/**
* Creates a new instance.
*/
public ContentElementNameValidator(EObject container, ContentElement e,
IFilter childFilter) {
super(container, UmaPackage.eINSTANCE
.getContentPackage_ContentElements(), childFilter, e,
UmaPackage.eINSTANCE.getNamedElement_Name());
}
/**
* Creates a new instance.
*/
public ContentElementNameValidator(EObject parent,
EStructuralFeature containingFeature, ContentElement e,
IFilter childFilter) {
super(parent, containingFeature, childFilter, e, UmaPackage.eINSTANCE
.getNamedElement_Name());
}
/**
* @see org.eclipse.epf.library.edit.validation.internal.UniquenessValidator#isValid(String)
*/
public String isValid(String newText) {
ContentElement e = (ContentElement) object;
// 156945 - Element name need to allow more special characters such as ?
// if the element does not generate a resource file
if ( e instanceof Section ) {
return newText;
}
String msg = TngUtil.checkElementName(newText, TngUtil.getTypeText(e));
if (msg != null)
return msg;
if (container != null) {
MethodPlugin plugin = UmaUtil.getMethodPlugin(container);
Integer max = new Integer(MaxFilePathNameLength);
if (! NameChecker.checkFilePathLength(plugin, e, newText, max.intValue(), null)) {
msg = NLS.bind(LibraryEditResources.filePathNameTooLong_msg,
new Object[] { max } );
return msg;
}
}
// Check whether a file with the same name already exists.
if (container != null && ContentDescriptionFactory.hasPresentation(e)) {
MethodPlugin plugin = UmaUtil.getMethodPlugin(container);
if(plugin == UmaUtil.getMethodPlugin(e)) {
URI uri = plugin.eResource().getURI();
if(uri.isFile()) {
File pluginDir = new File(uri.toFileString()).getParentFile();
IFileBasedLibraryPersister persister = ((IFileBasedLibraryPersister)Services.getLibraryPersister(Services.XMI_PERSISTENCE_TYPE));
String folderPath = persister.getFolderRelativePath(e);
String dir = new StringBuffer(pluginDir.getAbsolutePath()).append(
File.separator).append(folderPath).toString();
String fileName = newText + persister.getFileExtension(e);
File file = new File(dir, fileName);
File currentFile = null;
ContentDescription content = e.getPresentation();
if (content.eResource() != null) {
currentFile = new File(content.eResource().getURI()
.toFileString());
} else {
currentFile = file;
}
if (file.exists() && !newText.equals(e.getName()) && !file.equals(currentFile)) {
return NLS.bind(LibraryEditResources.duplicateContentFileError_msg, file);
}
}
}
}
return super.isValid(newText);
}
}