Search in sources :

Example 1 with EObjectImpl

use of org.eclipse.emf.ecore.impl.EObjectImpl in project tdi-studio-se by Talend.

the class ImportItemUtil method resolveItem.

public void resolveItem(ResourcesManager manager, ItemRecord itemRecord) {
    if (itemRecord.isResolved()) {
        return;
    }
    InputStream stream = null;
    try {
        final Item item = itemRecord.getItem();
        boolean byteArray = (item instanceof FileItem);
        IPath itemPath = getItemPath(itemRecord.getPath(), item);
        Set<IPath> paths = manager.getPaths();
        // check the item file
        if (!paths.contains(itemPath)) {
            itemRecord.addError(itemRecord.getItemName() + " " + Messages.getString("ImportItemUtil.MissingItemFile") + " - " + itemPath);
            log.error(itemRecord.getItemName() + " " + Messages.getString("ImportItemUtil.MissingItemFile") + " - " + //$NON-NLS-1$
            itemPath);
            return;
        }
        stream = manager.getStream(itemPath);
        Resource resource = createResource(itemRecord, itemPath, byteArray);
        if (byteArray) {
            // TDI-24612
            // This part fixes a problem of import of routines from .tar.gz.
            // Seems either the Tar stream or emf got problems to read this.
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int i = 0;
            while ((i = stream.read(buf)) != -1) {
                baos.write(buf, 0, i);
            }
            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            resource.load(bais, null);
        } else {
            resource.load(stream, null);
        }
        for (ReferenceFileItem rfItem : (List<ReferenceFileItem>) item.getReferenceResources()) {
            itemPath = getReferenceItemPath(itemRecord.getPath(), rfItem.getExtension());
            stream = manager.getStream(itemPath);
            Resource rfResource = createResource(itemRecord, itemPath, true);
            rfResource.load(stream, null);
        }
        Iterator<EObject> itRef = item.eCrossReferences().iterator();
        IPath parentPath = itemRecord.getPath().removeLastSegments(1);
        while (itRef.hasNext()) {
            EObject object = itRef.next();
            String linkedFile = EcoreUtil.getURI(object).toFileString();
            IPath linkedPath = parentPath.append(linkedFile);
            if (!paths.contains(linkedPath)) {
                if (linkedFile != null && !linkedFile.equals(itemPath.lastSegment()) && linkedFile.endsWith(itemPath.getFileExtension())) {
                    if (object.eIsProxy()) {
                        // if original href of the item point to some missing item file
                        // and if we can get the original item file from the name, recover it, but add a warning
                        ((EObjectImpl) object).eSetProxyURI(URI.createFileURI(itemPath.lastSegment()));
                        log.warn(itemRecord.getItemName() + " " + Messages.getString("ImportItemUtil.NotHrefCurrentItemFile") + " - " + //$NON-NLS-1$
                        itemRecord.getPath());
                    }
                }
            }
            EcoreUtil.resolve(object, resource);
        }
    } catch (IOException e) {
    // ignore
    } finally {
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
            // ignore
            }
        }
    }
    itemRecord.setResolved(true);
}
Also used : ReferenceFileItem(org.talend.core.model.properties.ReferenceFileItem) EObjectImpl(org.eclipse.emf.ecore.impl.EObjectImpl) IPath(org.eclipse.core.runtime.IPath) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) CwmResource(org.talend.model.emf.CwmResource) TalendXMIResource(org.talend.commons.runtime.model.emf.TalendXMIResource) ByteArrayResource(org.talend.core.model.properties.helper.ByteArrayResource) Resource(org.eclipse.emf.ecore.resource.Resource) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ReferenceFileItem(org.talend.core.model.properties.ReferenceFileItem) JobletProcessItem(org.talend.core.model.properties.JobletProcessItem) ConnectionItem(org.talend.core.model.properties.ConnectionItem) SQLPatternItem(org.talend.core.model.properties.SQLPatternItem) ProcessItem(org.talend.core.model.properties.ProcessItem) ContextItem(org.talend.core.model.properties.ContextItem) SnippetItem(org.talend.core.model.properties.SnippetItem) Item(org.talend.core.model.properties.Item) LinkDocumentationItem(org.talend.core.model.properties.LinkDocumentationItem) FolderItem(org.talend.core.model.properties.FolderItem) RoutineItem(org.talend.core.model.properties.RoutineItem) TDQItem(org.talend.core.model.properties.TDQItem) BusinessProcessItem(org.talend.core.model.properties.BusinessProcessItem) FileItem(org.talend.core.model.properties.FileItem) ReferenceFileItem(org.talend.core.model.properties.ReferenceFileItem) FileItem(org.talend.core.model.properties.FileItem) ByteArrayInputStream(java.io.ByteArrayInputStream) InternalEObject(org.eclipse.emf.ecore.InternalEObject) EObject(org.eclipse.emf.ecore.EObject) ArrayList(java.util.ArrayList) List(java.util.List) EList(org.eclipse.emf.common.util.EList)

Aggregations

ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 IPath (org.eclipse.core.runtime.IPath)1 EList (org.eclipse.emf.common.util.EList)1 EObject (org.eclipse.emf.ecore.EObject)1 InternalEObject (org.eclipse.emf.ecore.InternalEObject)1 EObjectImpl (org.eclipse.emf.ecore.impl.EObjectImpl)1 Resource (org.eclipse.emf.ecore.resource.Resource)1 TalendXMIResource (org.talend.commons.runtime.model.emf.TalendXMIResource)1 BusinessProcessItem (org.talend.core.model.properties.BusinessProcessItem)1 ConnectionItem (org.talend.core.model.properties.ConnectionItem)1 ContextItem (org.talend.core.model.properties.ContextItem)1 FileItem (org.talend.core.model.properties.FileItem)1 FolderItem (org.talend.core.model.properties.FolderItem)1 Item (org.talend.core.model.properties.Item)1 JobletProcessItem (org.talend.core.model.properties.JobletProcessItem)1