// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.ui.action.actions.handle;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.talend.commons.exception.BusinessException;
import org.talend.core.model.properties.Item;
import org.talend.dataprofiler.core.exception.ExceptionFactory;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dataprofiler.core.ui.utils.WorkbenchUtils;
import org.talend.dq.helper.PropertyHelper;
import org.talend.dq.nodes.DQRepositoryNode;
import org.talend.repository.model.IRepositoryNode;
import org.talend.resource.ResourceManager;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* This class is used for duplicate TDQFile which only use ByteArray, instead of ModelElement.
*/
public abstract class AbstractTDQFileDuplicateHandle implements IDuplicateHandle {
protected IFile file;
AbstractTDQFileDuplicateHandle(IRepositoryNode node) {
IPath itemPath = WorkbenchUtils.getFilePath(node);
DQRepositoryNode node2 = (DQRepositoryNode) node;
file = ResourceManager.getRoot().getProject(node2.getProject().getTechnicalLabel()).getFile(itemPath);
}
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.action.actions.handle.IDuplicateHandle#duplicate(java.lang.String)
*/
abstract protected Item createFileItemByDuplicateFile(IFile newFile, String fileExtension, String newName);
/*
* (non-Javadoc)
*
* @see org.talend.dataprofiler.core.ui.action.actions.handle.IDuplicateHandle#isExistedLabel(java.lang.String)
*/
public boolean isExistedLabel(IFile file, String label) {
IPath fullPath = file.getLocation() == null ? ResourceManager.getRootProject().getLocation().append(file.getFullPath())
: file.getLocation();
String fileExtension = fullPath.getFileExtension();
IPath newPath = fullPath.removeLastSegments(1).append(label).addFileExtension(fileExtension);
return newPath.toFile().exists();
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataprofiler.core.ui.action.actions.handle.IDuplicateHandle#duplicateItem(org.talend.core.model.properties
* .Item, java.lang.String)
*/
public Item duplicateItem(Item oldItem, String newName) throws BusinessException {
String fileExtension = file.getFileExtension();
IPath newFileNamePath = new Path(newName).addFileExtension(fileExtension);
// IFile newFile = file.getParent().getFile(newFileNamePath);
ModelElement oldModelElement = PropertyHelper.getModelElement(oldItem.getProperty());
IFolder folder = extractFolder(oldItem, oldModelElement);
IFile newFile = folder.getFile(newFileNamePath);
// createt the file item by the duplicated file
Item duplicate = createFileItemByDuplicateFile(newFile, fileExtension, newName);
if (duplicate == null) {
BusinessException createBusinessException = ExceptionFactory.getInstance().createBusinessException(
DefaultMessagesImpl.getString("AbstractTDQFileDuplicateHandle.duplicateFail", oldItem.getProperty()//$NON-NLS-1$
.getDisplayName()));
throw createBusinessException;
}
return duplicate;
}
/**
* DOC msjian Comment method "extractFolder".
*
* @param oldItem
* @param oldModelElement
* @return
*/
abstract protected IFolder extractFolder(Item oldItem, ModelElement oldObject);
}