// ============================================================================
//
// 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.core.model.repository;
import java.util.Set;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.talend.commons.exception.SystemException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.utils.VersionUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.PluginChecker;
import org.talend.core.model.components.IComponentsService;
import org.talend.core.model.properties.BusinessProcessItem;
import org.talend.core.model.properties.Property;
import org.talend.core.model.utils.RepositoryManagerHelper;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.ui.IJobletProviderService;
import org.talend.designer.codegen.ICodeGeneratorService;
import org.talend.designer.core.ICamelDesignerCoreService;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.model.nodes.IProjectRepositoryNode;
import org.talend.repository.ui.views.IRepositoryView;
/**
* ggu class global comment. Detailled comment
*/
public final class RepositoryManager {
public static final String PATTERNS_SEPARATOR = ","; //$NON-NLS-1$
public static IPreferenceStore getPreferenceStore() {
return CoreRuntimePlugin.getInstance().getDesignerCoreService().getDesignerCorePreferenceStore();
}
public static boolean isRefreshManually() {
return getPreferenceStore().getBoolean(IRepositoryPrefConstants.MANUALLY_REFRESH);
}
public static boolean isRefreshCreated() {
return getPreferenceStore().getBoolean(IRepositoryPrefConstants.CREATING_REFRESH);
}
public static boolean isRefreshSaved() {
return getPreferenceStore().getBoolean(IRepositoryPrefConstants.SAVING_REFRESH);
}
public static boolean isRefreshDeleted() {
return getPreferenceStore().getBoolean(IRepositoryPrefConstants.DELETING_REFRESH);
}
public static IRepositoryView getRepositoryView() {
return RepositoryManagerHelper.getRepositoryView();
}
/**
*
* for create
*/
public static void refreshCreatedNode(ERepositoryObjectType type) {
// if (isRefreshManually() || !isRefreshCreated()) {
refresh(type);
// } else {
// IRepositoryView repositoryView = getRepositoryView();
// if (repositoryView != null) {
// repositoryView.refresh();
// }
// }
// qli modified to fix the bug 6659.
if (type != null) {
syncRoutineAndJoblet(type);
}
}
/**
*
* for editorProperties
*/
public static void refreshEditorPropertiesNode(ERepositoryObjectType type) {
if (isRefreshManually() || !isRefreshCreated()) {
refresh(type);
} else {
IRepositoryView repositoryView = getRepositoryView();
if (repositoryView != null) {
repositoryView.refresh();
}
}
if (type != null) {
syncRoutineAndJoblet(type);
}
}
public static void refreshCreatedNode(IProjectRepositoryNode projectNode, ERepositoryObjectType type) {
IRepositoryView repositoryView = getRepositoryView();
if (repositoryView != null) {
if ((isRefreshManually() || !isRefreshCreated()) && !type.isSubItem()) {
if (projectNode != null) {
RepositoryNode rootNode = (RepositoryNode) projectNode.getRootRepositoryNode(type);
repositoryView.refreshAllChildNodes(rootNode);
} else {
// main project
refresh(type);
}
} else {
repositoryView.refresh();
}
// qli modified to fix the bug 6659.
if (type != null) {
syncRoutineAndJoblet(type);
}
}
}
/**
*
* for delete
*/
public static void refreshDeletedNode(Set<ERepositoryObjectType> types) {
IRepositoryView repositoryView = getRepositoryView();
if (repositoryView != null) {
// if (isRefreshManually() || !isRefreshDeleted()) {
//
// RepositoryNode root = repositoryView.getRoot();
// if (root != null && root instanceof IProjectRepositoryNode) {
// RepositoryNode recBinNode = ((IProjectRepositoryNode) root).getRecBinNode();
//
// Set<ERepositoryObjectType> existedTypes = new HashSet<ERepositoryObjectType>();
// for (RepositoryNode child : recBinNode.getChildren()) {
// ERepositoryObjectType objectType = child.getObjectType();
// if (objectType.isSubItem()) {
// RepositoryNode parent = child.getParent();
// if (parent.getObject() == null) { // for db connection
// parent = parent.getParent();
// }
// existedTypes.add(parent.getObjectType());
// }
// }
// repositoryView.refreshAllChildNodes(recBinNode);
//
// if (types != null) {
// refresh(types);
// existedTypes.removeAll(types);
// }
// refresh(existedTypes);
//
// repositoryView.refresh(recBinNode);
// }
//
// } else {
repositoryView.refresh();
// }
}
}
/**
*
* for save
*/
public static void refreshSavedNode(RepositoryNode node) {
if (node == null) {
return;
}
IRepositoryView repositoryView = getRepositoryView();
if (repositoryView != null) {
if (isRefreshManually() || !isRefreshSaved()) {
repositoryView.refresh(node);
} else {
repositoryView.refresh();
}
}
}
/**
*
*
*/
public static void refresh(ERepositoryObjectType type) {
if (type != null) {
IRepositoryView repositoryView = getRepositoryView();
if (repositoryView != null) {
repositoryView.refresh(type);
repositoryView.refresh();
}
}
}
public static void refresh(Set<ERepositoryObjectType> types) {
IRepositoryView repositoryView = getRepositoryView();
if (types != null && repositoryView != null) {
for (ERepositoryObjectType type : types) {
repositoryView.refresh(type);
}
}
}
/**
*
* qli Comment method "syncRoutineAndJoblet".
*
* synchronize the routines and the joblets created by other users.
*/
public static void syncRoutineAndJoblet(ERepositoryObjectType type) {
if (type == null) {
return;
}
if (type.equals(ERepositoryObjectType.ROUTINES)) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICodeGeneratorService.class)) {
ICodeGeneratorService codeGenService = (ICodeGeneratorService) GlobalServiceRegister.getDefault().getService(
ICodeGeneratorService.class);
try {
codeGenService.createRoutineSynchronizer().syncAllRoutines();
} catch (SystemException e) {
ExceptionHandler.process(e);
}
}
} else if (type.equals(ERepositoryObjectType.JOBLET)) {
if (PluginChecker.isJobLetPluginLoaded()) {
IJobletProviderService jobletService = (IJobletProviderService) GlobalServiceRegister.getDefault().getService(
IJobletProviderService.class);
if (jobletService != null) {
jobletService.loadComponentsFromProviders();
}
}
} else {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) {
ICamelDesignerCoreService service = (ICamelDesignerCoreService) GlobalServiceRegister.getDefault().getService(
ICamelDesignerCoreService.class);
if (type.equals(service.getBeansType())) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICodeGeneratorService.class)) {
ICodeGeneratorService codeGenService = (ICodeGeneratorService) GlobalServiceRegister.getDefault()
.getService(ICodeGeneratorService.class);
try {
codeGenService.createCamelBeanSynchronizer().syncAllBeans();
} catch (SystemException e) {
ExceptionHandler.process(e);
}
}
}
}
}
}
public static void syncUserComponents() {
if (PluginChecker.isSVNProviderPluginLoaded()) {
IComponentsService codeGenService = (IComponentsService) GlobalServiceRegister.getDefault().getService(
IComponentsService.class);
if (codeGenService != null) {
codeGenService.getComponentsFactory().loadUserComponentsFromComponentsProviderExtension();
}
}
}
/**
*
* ggu Comment method "isOpenedItemInEditor".
*
* for jobs/joblets/business diagrams/routines/sql patterns
*/
public static boolean isOpenedItemInEditor(IRepositoryViewObject objectToMove) {
try {
if (objectToMove != null) {
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (activeWorkbenchWindow != null) {
IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
if (activePage != null) {
IEditorReference[] editorReferences = activePage.getEditorReferences();
if (editorReferences != null) {
for (IEditorReference editorReference : editorReferences) {
IEditorInput editorInput = editorReference.getEditorInput();
if ((editorInput != null && editorInput instanceof IRepositoryEditorInput)) {
IRepositoryEditorInput rInput = (IRepositoryEditorInput) editorInput;
Property openedProperty = rInput.getItem().getProperty();
if (openedProperty.getId().equals(objectToMove.getId())
&& VersionUtils.compareTo(openedProperty.getVersion(), objectToMove.getVersion()) == 0) {
return true;
}
} else if (objectToMove.getProperty().getItem() instanceof BusinessProcessItem) {
Object obj = editorInput.getAdapter(IRepositoryEditorInput.class);
if (obj instanceof IRepositoryEditorInput) {
IRepositoryEditorInput rInput = (IRepositoryEditorInput) obj;
Property openedProperty = rInput.getItem().getProperty();
if (openedProperty.getId().equals(objectToMove.getId())
&& VersionUtils.compareTo(openedProperty.getVersion(), objectToMove.getVersion()) == 0) {
return true;
}
}
}
}
}
}
}
}
} catch (PartInitException e) {
ExceptionHandler.process(e);
}
return false;
}
/**
*
* ggu Comment method "isEditableItemInEditor".
*
* it's editable also.
*
* for jobs/joblets/business diagrams/routines/sql patterns
*/
public static boolean isEditableItemInEditor(IRepositoryViewObject objectToMove) {
try {
if (objectToMove != null) {
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (activeWorkbenchWindow != null) {
IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
if (activePage != null) {
IEditorReference[] editorReferences = activePage.getEditorReferences();
if (editorReferences != null) {
Property property = objectToMove.getProperty().getItem().getProperty();
for (IEditorReference editorReference : editorReferences) {
IEditorInput editorInput = editorReference.getEditorInput();
if (editorInput != null) {
IRepositoryEditorInput rInput = null;
// for business/routine/sql pattern
IPersistableElement persistableElement = editorInput.getPersistable();
if (persistableElement != null && persistableElement instanceof IRepositoryEditorInput) {
rInput = (IRepositoryEditorInput) persistableElement;
}
// for job/joblet/routine/sql pattern
if (editorInput instanceof IRepositoryEditorInput) {
rInput = (IRepositoryEditorInput) editorInput;
}
if (rInput != null) {
Property openedProperty = rInput.getItem().getProperty();
if (openedProperty.getId().equals(property.getId())
&& VersionUtils.compareTo(openedProperty.getVersion(), property.getVersion()) == 0
&& !rInput.isReadOnly()) {
return true;
}
}
}
}
}
}
}
}
} catch (PartInitException e) {
ExceptionHandler.process(e);
}
return false;
}
}