// ============================================================================ // // 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 java.io.File; import java.io.IOException; import java.io.InputStream; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.ecore.resource.Resource; import org.talend.commons.exception.ExceptionHandler; import org.talend.commons.exception.PersistenceException; import org.talend.commons.utils.VersionUtils; import org.talend.commons.utils.WorkspaceUtils; import org.talend.core.model.properties.ByteArray; 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.PluginConstant; import org.talend.dataquality.properties.TDQJrxmlItem; import org.talend.repository.ProjectManager; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryNode; import org.talend.resource.EResourceConstant; import org.talend.resource.ResourceManager; import orgomg.cwm.objectmodel.core.ModelElement; /** * Duplicate a Jrxml file */ public class JrxmlFileDuplicateHandle extends AbstractTDQFileDuplicateHandle { JrxmlFileDuplicateHandle(IRepositoryNode node) { super(node); } @Override protected Item createFileItemByDuplicateFile(IFile newFile, String fileExtension, String newName) { IPath makeRelativeTo = newFile.getFullPath().removeFirstSegments(1).removeLastSegments(1) .makeRelativeTo(ResourceManager.getJRXMLFolder().getFullPath().removeFirstSegments(1)); return createJrxml(makeRelativeTo, newName, WorkspaceUtils.ifileToFile(file), fileExtension); } /** * create jrxml file. * * @param path * @param label * @param initFile * @param extendtion * @return */ public TDQJrxmlItem createJrxml(IPath path, String label, File initFile, String extendtion) { Property property = PropertiesFactory.eINSTANCE.createProperty(); property.setVersion(VersionUtils.DEFAULT_VERSION); property.setStatusCode(PluginConstant.EMPTY_STRING); property.setLabel(label); TDQJrxmlItem routineItem = org.talend.dataquality.properties.PropertiesFactory.eINSTANCE.createTDQJrxmlItem(); routineItem.setProperty(property); routineItem.setExtension(extendtion); routineItem.setName(label); ByteArray byteArray = duplicateByteArray(initFile); routineItem.setContent(byteArray); IProxyRepositoryFactory repositoryFactory = ProxyRepositoryFactory.getInstance(); try { property.setId(repositoryFactory.getNextId()); if (path != null) { repositoryFactory.createParentFoldersRecursively(ERepositoryObjectType.getItemType(routineItem), path); } repositoryFactory.create(routineItem, path); } catch (PersistenceException e) { ExceptionHandler.process(e); } return routineItem; } @SuppressWarnings("deprecation") private ByteArray duplicateByteArray(File initFile) { ByteArray byteArray = PropertiesFactory.eINSTANCE.createByteArray(); InputStream stream = null; try { stream = initFile.toURL().openStream(); byte[] innerContent = new byte[stream.available()]; stream.read(innerContent); byteArray.setInnerContent(innerContent); } catch (IOException e) { ExceptionHandler.process(e); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { // } } } String routineContent = new String(byteArray.getInnerContent()); byteArray.setInnerContent(routineContent.getBytes()); return byteArray; } /** * DOC msjian Comment method "extractFolder". * * @param oldItem * @param oldModelElement * @return */ @Override protected IFolder extractFolder(Item oldItem, ModelElement oldObject) { boolean inCurrentMainProject = ProjectManager.getInstance().isInCurrentMainProject(oldItem); if (inCurrentMainProject) { Resource resource = oldItem.eResource(); IPath path = new Path(resource.getURI().toPlatformString(false)); IFile oldFile = ResourcesPlugin.getWorkspace().getRoot().getFile(path); return (IFolder) oldFile.getParent(); } else { // for the reference project node, we get its folder in current project. return ResourceManager.getOneFolder(EResourceConstant.JRXML_TEMPLATE); } } }