// ============================================================================ // // 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; import java.io.File; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.action.Action; import org.eclipse.ui.cheatsheets.ICheatSheetAction; import org.eclipse.ui.cheatsheets.ICheatSheetManager; import org.talend.commons.exception.ExceptionHandler; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.utils.VersionUtils; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.properties.Property; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.dataprofiler.core.CorePlugin; import org.talend.dataprofiler.core.ImageLib; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.helper.WorkspaceResourceHelper; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dq.helper.FileUtils; import org.talend.repository.RepositoryWorkUnit; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.RepositoryNode; import org.talend.resource.ResourceManager; /** * DOC bZhou class global comment. Detailled comment <br/> * * $Id: talend.epf 55206 2011-02-15 17:32:14Z bzhou $ * */ public abstract class AbstractImportFileAction extends Action implements ICheatSheetAction { protected RepositoryNode node; public AbstractImportFileAction(RepositoryNode node) { setImageDescriptor(ImageLib.getImageDescriptor(ImageLib.IMPORT)); this.node = node; } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { RepositoryWorkUnit<Object> repositoryWorkUnit = new RepositoryWorkUnit<Object>("import items") { //$NON-NLS-1$ @Override protected void run() throws LoginException, PersistenceException { if (node != null) { try { final Map<File, IPath> resultMap = computeFilePath(); if (resultMap != null && resultMap.size() != 0) { for (final File file : resultMap.keySet()) { // MOD msjian TDQ-4608 2012-3-6: when the file is *.jasper, copy it. IPath path = resultMap.get(file); if (file.getName().endsWith(PluginConstant.JASPER_STRING)) { // TDQ-7451 Replace File copy with eclipse IFile create.make svn could syn and // control. IFile targetFile = ResourceManager.getJRXMLFolder().getFile(path.append(file.getName())); WorkspaceResourceHelper.createIFileFromFile( file, targetFile, DefaultMessagesImpl.getString( "AbstractImportFileAction.importJasperFile", file.getName())); //$NON-NLS-1$ } else { createItem(file, path); } // TDQ-4608~ } saveAndRefresh(); } } catch (Exception e) { ExceptionHandler.process(e); } } } }; repositoryWorkUnit.setAvoidUnloadResources(true); ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(repositoryWorkUnit); } /** * DOC bZhou Comment method "createItem". * * @param initFile * @param path * @return * @throws Exception */ protected Item createItem(File initFile, IPath path) throws Exception { Property property = PropertiesFactory.eINSTANCE.createProperty(); property.setVersion(VersionUtils.DEFAULT_VERSION); property.setStatusCode(PluginConstant.EMPTY_STRING); property.setLabel(FileUtils.getName(initFile)); Item item = initItem(initFile); if (item != null) { item.setProperty(property); property.setItem(item); IProxyRepositoryFactory repositoryFactory = ProxyRepositoryFactory.getInstance(); property.setId(repositoryFactory.getNextId()); if (path != null) { repositoryFactory.createParentFoldersRecursively(ERepositoryObjectType.getItemType(item), path); } repositoryFactory.create(item, path, true); } return item; } /** * DOC bZhou Comment method "saveAndRefresh". */ private void saveAndRefresh() { CorePlugin.getDefault().refreshDQView(node); } /* * (non-Javadoc) * * @see org.eclipse.ui.cheatsheets.ICheatSheetAction#run(java.lang.String[], * org.eclipse.ui.cheatsheets.ICheatSheetManager) */ public void run(String[] params, ICheatSheetManager manager) { // ADD xqliu TDQ-4285 2011-12-27 if (!CheatSheetActionHelper.canRun()) { return; } // ~ TDQ-4285 run(); } public abstract Map<File, IPath> computeFilePath() throws Exception; public abstract Item initItem(File srcFile) throws Exception; public abstract ERepositoryObjectType getRepositoryType(); }