Search in sources :

Example 1 with TDQItem

use of org.talend.core.model.properties.TDQItem in project tdi-studio-se by Talend.

the class ImportItemUtil method checkItem.

private boolean checkItem(ItemRecord itemRecord, boolean overwrite) {
    boolean result = false;
    try {
        Item item = itemRecord.getItem();
        if (item instanceof TDQItem) {
            // hide tdq first
            return false;
        }
        ERepositoryObjectType itemType = ERepositoryObjectType.getItemType(item);
        if (itemType == null) {
            //$NON-NLS-1$
            itemRecord.addError(Messages.getString("ImportItemUtil.unsupportItem"));
            // can't import this item.
            return false;
        }
        cache.initialize(itemType);
        boolean isAllowMultipleName = (itemType == ERepositoryObjectType.SQLPATTERNS || itemType == ERepositoryObjectType.METADATA_FILE_XML);
        String itemPath = null;
        if (item.getState() != null) {
            itemPath = item.getState().getPath();
        } else {
            itemRecord.addError(Messages.getString("ImportItemUtil.unsupportItem"));
            return false;
        }
        boolean nameAvailable = true;
        IRepositoryViewObject itemWithSameId = null;
        IRepositoryViewObject itemWithSameName = null;
        // take care, in cache it's RepositoryViewObject, not RepositoryObject
        for (IRepositoryViewObject current : cache.getItemsFromRepository().get(itemType)) {
            final Property property = itemRecord.getProperty();
            if (property != null) {
                if (property.getLabel() != null && property.getLabel().equalsIgnoreCase(current.getLabel()) && property.getId() != current.getId()) {
                    // repository.
                    if (!isAllowMultipleName || current.getPath().equals(itemPath)) {
                        nameAvailable = false;
                    }
                    // elements
                    if (!nameAvailable) {
                        itemWithSameName = current;
                    }
                }
                if (property.getId() != null && property.getId().equalsIgnoreCase(current.getId())) {
                    itemWithSameId = current;
                }
            }
        }
        itemRecord.setExistingItemWithSameId(itemWithSameId);
        boolean idAvailable = itemWithSameId == null;
        boolean isSystem = false;
        // we do not import built in routines
        if (item.eClass().equals(PropertiesPackage.eINSTANCE.getRoutineItem())) {
            RoutineItem routineItem = (RoutineItem) item;
            if (routineItem.isBuiltIn()) {
                isSystem = true;
            }
        }
        // we do not import system sql patterns
        if (item.eClass().equals(PropertiesPackage.eINSTANCE.getSQLPatternItem())) {
            SQLPatternItem sqlPatternItem = (SQLPatternItem) item;
            if (sqlPatternItem.isSystem()) {
                isSystem = true;
            }
        }
        if (isSystem) {
            itemRecord.addError(Messages.getString("RepositoryUtil.isSystem"));
            return false;
        }
        if (nameAvailable) {
            if (idAvailable) {
                if (!isSystem) {
                    result = true;
                }
            /*
                       * else { itemRecord.addError(Messages.getString("RepositoryUtil.isSystemRoutine")); //$NON-NLS-1$
                       * }
                       */
            } else {
                // same id but different name,no need to care overwrite cause the item will be considered as a
                // different one,see bug 20445
                itemRecord.setState(State.ID_EXISTED);
                // if (overwrite) {
                // result = true;
                // } else {
                // see bug 0005222: [Import items] [Errors and Warnings]
                // id is already in use
                result = true;
            // RepositoryNode nodeWithSameId = RepositoryNodeUtilities.getRepositoryNode(itemWithSameId);
            // IPath path = getPath(nodeWithSameId);
            // itemRecord.addError(Messages.getString(
            //                                "RepositoryUtil.idUsed", itemWithSameId.getLabel(), path.toOSString())); //$NON-NLS-1$
            // }
            }
        } else {
            if (idAvailable) {
                // same name but different id
                itemRecord.setState(State.NAME_EXISTED);
                if (!isSystem && overwrite) {
                    // if anything system, don't replace the source item if same name.
                    // if not from system, can overwrite.
                    itemRecord.setExistingItemWithSameId(itemWithSameName);
                    result = true;
                }
                // if item is locked, cannot overwrite
                if (result && overwrite && itemWithSameName != null) {
                    ERepositoryStatus status = itemWithSameName.getRepositoryStatus();
                    if (status == ERepositoryStatus.LOCK_BY_OTHER || status == ERepositoryStatus.LOCK_BY_USER) {
                        //$NON-NLS-1$
                        itemRecord.addError(Messages.getString("RepositoryUtil.itemLocked"));
                        return false;
                    }
                }
            } else {
                // same name and same id
                itemRecord.setState(State.NAME_AND_ID_EXISTED);
                if (overwrite) {
                    result = true;
                }
                if (!isSystem && overwrite && !itemWithSameName.getProperty().getLabel().equals(itemWithSameId.getProperty().getLabel())) {
                    // if anything system, don't replace the source item if same name.
                    // if not from system, can overwrite.
                    itemRecord.setExistingItemWithSameId(itemWithSameName);
                    result = true;
                }
            }
            if (!result && !isSystem) {
                //$NON-NLS-1$
                itemRecord.addError(Messages.getString("RepositoryUtil.nameUsed"));
            }
        }
        if (result && overwrite && itemRecord.getState() == State.NAME_AND_ID_EXISTED) {
            // if item is locked, cannot overwrite
            if (checkIfLocked(itemRecord)) {
                //$NON-NLS-1$
                itemRecord.addError(Messages.getString("RepositoryUtil.itemLocked"));
                result = false;
            }
        }
    } catch (Exception e) {
        log.error("Error when checking item :" + itemRecord.getPath(), e);
    }
    return result;
}
Also used : 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) ERepositoryStatus(org.talend.commons.runtime.model.repository.ERepositoryStatus) IRepositoryViewObject(org.talend.core.model.repository.IRepositoryViewObject) TDQItem(org.talend.core.model.properties.TDQItem) RoutineItem(org.talend.core.model.properties.RoutineItem) SQLPatternItem(org.talend.core.model.properties.SQLPatternItem) ERepositoryObjectType(org.talend.core.model.repository.ERepositoryObjectType) Property(org.talend.core.model.properties.Property) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) MalformedURLException(java.net.MalformedURLException) PersistenceException(org.talend.commons.exception.PersistenceException)

Aggregations

FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 MalformedURLException (java.net.MalformedURLException)1 CoreException (org.eclipse.core.runtime.CoreException)1 PersistenceException (org.talend.commons.exception.PersistenceException)1 ERepositoryStatus (org.talend.commons.runtime.model.repository.ERepositoryStatus)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 LinkDocumentationItem (org.talend.core.model.properties.LinkDocumentationItem)1 ProcessItem (org.talend.core.model.properties.ProcessItem)1 Property (org.talend.core.model.properties.Property)1 ReferenceFileItem (org.talend.core.model.properties.ReferenceFileItem)1 RoutineItem (org.talend.core.model.properties.RoutineItem)1 SQLPatternItem (org.talend.core.model.properties.SQLPatternItem)1