org.talend.repository.ui.actions.DeleteActionCache.java Source code

Java tutorial

Introduction

Here is the source code for org.talend.repository.ui.actions.DeleteActionCache.java

Source

// ============================================================================
//
// Copyright (C) 2006-2012 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.repository.ui.actions;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.map.MultiKeyMap;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.core.model.general.Project;
import org.talend.core.model.process.IProcess2;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryEditorInput;
import org.talend.core.model.repository.IRepositoryObject;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.utils.RepositoryManagerHelper;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.repository.model.ERepositoryStatus;
import org.talend.repository.model.IProxyRepositoryFactory;

/**
 * cli class global comment. Detailled comment
 */
public final class DeleteActionCache {

    private static DeleteActionCache singleton = null;

    private DeleteActionCache() {
        singleton = this;
    }

    public static DeleteActionCache getInstance() {
        if (singleton == null) {
            singleton = new DeleteActionCache();
        }
        return singleton;
    }

    public void createRecords() {
        clearRecords();

        setOpenedProcessList(RepositoryManagerHelper.getOpenedProcess());
        setOpenProcessMap(createOpenProcessMap(getOpenedProcessList()));

        IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
        List<IRepositoryViewObject> tmpProcessList = null;
        try {
            tmpProcessList = factory.getAll(ERepositoryObjectType.PROCESS, true);
            if (tmpProcessList == null) {
                tmpProcessList = new ArrayList<IRepositoryViewObject>();
            }
            List<IRepositoryViewObject> jobletList = factory.getAll(ERepositoryObjectType.JOBLET, true);
            if (jobletList != null) {
                tmpProcessList.addAll(jobletList);
            }
        } catch (PersistenceException e) {
            ExceptionHandler.process(e);
        }
        setProcessList(tmpProcessList);
    }

    private static MultiKeyMap createOpenProcessMap(List<IProcess2> openedProcessList) {
        MultiKeyMap map = new MultiKeyMap();
        if (openedProcessList != null) {
            for (IProcess2 process : openedProcessList) {
                map.put(process.getId(), process.getName(), process.getVersion(), process);
            }
        }
        return map;
    }

    /**
     * 
     * cli Comment method "clearRecords".
     * 
     * revert the original values.
     */
    public void clearRecords() {
        List list = getOpenedProcessList();
        if (list != null) {
            list.clear();
        }
        list = getProcessList();
        if (list != null) {
            list.clear();
        }
        MultiKeyMap map = getOpenProcessMap();
        if (map != null) {
            map.clear();
        }
        map = getRepositoryObjectMap();
        if (map != null) {
            map.clear();
        }

    }

    /*
     * 
     */
    private List<IProcess2> openedProcessList;

    private MultiKeyMap openProcessMap;

    private List<IRepositoryViewObject> processList;

    public List<IProcess2> getOpenedProcessList() {
        return this.openedProcessList;
    }

    private void setOpenedProcessList(List<IProcess2> openedProcessList) {
        this.openedProcessList = openedProcessList;
    }

    public MultiKeyMap getOpenProcessMap() {
        return this.openProcessMap;
    }

    private void setOpenProcessMap(MultiKeyMap openProcessMap) {
        this.openProcessMap = openProcessMap;
    }

    public List<IRepositoryViewObject> getProcessList() {
        return this.processList;
    }

    public void setProcessList(List<IRepositoryViewObject> processList) {
        this.processList = processList;
    }

    /*
     * work for documentation.
     */
    private MultiKeyMap repositoryObjectMap = new MultiKeyMap();

    private MultiKeyMap getRepositoryObjectMap() {
        return this.repositoryObjectMap;
    }

    private static final boolean DEFAULT_VALUE = true;

    private boolean docRefresh = DEFAULT_VALUE;

    private boolean getAlways = DEFAULT_VALUE;

    private boolean isAlways() {
        return this.getAlways;
    }

    /**
     * 
     * cli Comment method "setGetAlways".
     * 
     * work for documentation
     */
    public void setGetAlways(boolean always) {
        this.getAlways = always;
    }

    public boolean isDocRefresh() {
        return this.docRefresh;
    }

    public void setDocRefresh(boolean docRefresh) {
        this.docRefresh = docRefresh;
    }

    public void revertParameters() {
        clearRecords();
        setGetAlways(DEFAULT_VALUE);
        setDocRefresh(DEFAULT_VALUE);

    }

    @SuppressWarnings("unchecked")
    public List<IRepositoryObject> getRepositoryObjects(Project project, ERepositoryObjectType type,
            boolean withDeleted) throws PersistenceException {
        Object result = null;
        if (!isAlways()) {
            result = getRepositoryObjectMap().get(project, type);
        }
        if (result == null) {
            IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory();
            List<IRepositoryViewObject> all = factory.getAll(project, type, true, true);
            getRepositoryObjectMap().put(project, type, all);

            if (withDeleted) {
                result = all;
            } else {
                List<IRepositoryViewObject> noDeleted = new ArrayList<IRepositoryViewObject>();
                for (IRepositoryViewObject obj : all) {
                    ERepositoryStatus status = factory.getStatus(obj);
                    if (ERepositoryStatus.DELETED != status) {
                        noDeleted.add(obj);
                    }
                }
                result = noDeleted;
            }

        }
        return (List<IRepositoryObject>) result;
    }

    /**
     * 
     * ggu Comment method "closeRelations".
     * 
     * bug 12883
     */
    public void closeOpenedEditor(final IRepositoryViewObject objToDelete) {
        if (objToDelete != null) {
            Display disp = Display.getCurrent();
            if (disp == null) {
                disp = Display.getDefault();
            }
            if (disp != null) {
                disp.syncExec(new Runnable() {

                    public void run() {
                        closeEditor(objToDelete);
                    }
                });
            } else {
                closeEditor(objToDelete);
            }
        }
    }

    private void closeEditor(final IRepositoryViewObject objToDelete) {
        if (objToDelete != null) {
            IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
            if (activeWorkbenchWindow != null) {
                IWorkbenchPage page = activeWorkbenchWindow.getActivePage();
                if (page != null) {
                    for (IEditorReference editors : page.getEditorReferences()) {
                        IEditorPart editor = editors.getEditor(false);
                        if (editor != null) {
                            IEditorInput editorInput = editor.getEditorInput();
                            String id = null;
                            if (editorInput != null && editorInput instanceof IRepositoryEditorInput) {
                                Item item = ((IRepositoryEditorInput) editorInput).getItem();
                                if (item != null) {
                                    id = item.getProperty().getId();
                                }
                            }
                            if (objToDelete.getId() != null && objToDelete.getId().equals(id)) {
                                page.closeEditor(editor, false);
                            }
                        }
                    }
                }
            }
        }
    }
}