// ============================================================================
//
// 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.repository.model;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceDescription;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.talend.commons.CommonsPlugin;
import org.talend.commons.exception.BusinessException;
import org.talend.commons.exception.LoginException;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.exception.SystemException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler;
import org.talend.commons.utils.data.container.RootContainer;
import org.talend.commons.utils.time.TimeMeasure;
import org.talend.commons.utils.workbench.resources.ResourceUtils;
import org.talend.core.AbstractDQModelService;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.ICoreService;
import org.talend.core.IESBService;
import org.talend.core.ITDQRepositoryService;
import org.talend.core.PluginChecker;
import org.talend.core.context.Context;
import org.talend.core.context.RepositoryContext;
import org.talend.core.exception.TalendInternalPersistenceException;
import org.talend.core.language.LanguageManager;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.general.Project;
import org.talend.core.model.metadata.builder.connection.AbstractMetadataObject;
import org.talend.core.model.metadata.builder.connection.MetadataTable;
import org.talend.core.model.migration.IMigrationToolService;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.ContextItem;
import org.talend.core.model.properties.FolderItem;
import org.talend.core.model.properties.FolderType;
import org.talend.core.model.properties.InformationLevel;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.JobDocumentationItem;
import org.talend.core.model.properties.JobletDocumentationItem;
import org.talend.core.model.properties.JobletProcessItem;
import org.talend.core.model.properties.ProcessItem;
import org.talend.core.model.properties.PropertiesPackage;
import org.talend.core.model.properties.Property;
import org.talend.core.model.properties.SpagoBiServer;
import org.talend.core.model.properties.Status;
import org.talend.core.model.properties.impl.FolderItemImpl;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.Folder;
import org.talend.core.model.repository.IRepositoryContentHandler;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.repository.IRepositoryWorkUnitListener;
import org.talend.core.model.repository.LockInfo;
import org.talend.core.model.repository.RepositoryContentManager;
import org.talend.core.model.repository.RepositoryObject;
import org.talend.core.model.repository.RepositoryViewObject;
import org.talend.core.repository.CoreRepositoryPlugin;
import org.talend.core.repository.constants.Constant;
import org.talend.core.repository.constants.FileConstants;
import org.talend.core.repository.i18n.Messages;
import org.talend.core.repository.utils.RepositoryPathProvider;
import org.talend.core.repository.utils.XmiResourceManager;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.token.TokenCollectorFactory;
import org.talend.cwm.helper.SubItemHelper;
import org.talend.cwm.helper.TableHelper;
import org.talend.repository.ProjectManager;
import org.talend.repository.RepositoryWorkUnit;
import org.talend.repository.documentation.ERepositoryActionName;
import org.talend.repository.model.ERepositoryStatus;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.RepositoryConstants;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* Repository factory use by client. Based on implementation provide by extension point system. This class contains all
* commons treatments done by repository whatever implementation.<br/>
*
* $Id: ProxyRepositoryFactory.java 46606 2010-08-11 08:33:54Z cli $
*
*/
/**
* DOC Administrator class global comment. Detailled comment
*/
public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
private static ICoreService coreService = (ICoreService) GlobalServiceRegister.getDefault().getService(ICoreService.class);
private static final int MAX_TASKS = 8;
private static Logger log = Logger.getLogger(ProxyRepositoryFactory.class);
private IRepositoryFactory repositoryFactoryFromProvider;
private static ProxyRepositoryFactory singleton = null;
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
private boolean fullLogonFinished;
private ProjectManager projectManager;
@Override
public synchronized void addPropertyChangeListener(PropertyChangeListener l) {
if (l == null) {
throw new IllegalArgumentException();
}
support.addPropertyChangeListener(l);
}
@Override
public synchronized void removePropertyChangeListener(PropertyChangeListener l) {
if (l != null) {
support.removePropertyChangeListener(l);
}
}
protected void fireRepositoryPropertyChange(String property, Object oldValue, Object newValue) {
if (support.hasListeners(property)) {
support.firePropertyChange(property, oldValue, newValue);
}
}
/**
* DOC smallet ProxyRepositoryFactory constructor comment.
*/
private ProxyRepositoryFactory() {
projectManager = ProjectManager.getInstance();
}
public static synchronized ProxyRepositoryFactory getInstance() {
if (singleton == null) {
singleton = new ProxyRepositoryFactory();
}
return singleton;
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#refreshJobPictureFolder()
*/
@Override
public void refreshJobPictureFolder(String picFolder) {
IFolder folder = RepositoryPathProvider.getFolder(picFolder);
try {
folder.refreshLocal(1, null);
} catch (Exception e) {
// e.printStackTrace();
ExceptionHandler.process(e);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#refreshJobPictureFolder()
*/
@Override
public void refreshDocumentationFolder(String docFolder) {
IFolder folder = RepositoryPathProvider.getFolder(docFolder);
if (folder != null) {
try {
folder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
} catch (Exception e) {
// e.printStackTrace();
ExceptionHandler.process(e);
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getRepositoryContext()
*/
@Override
public RepositoryContext getRepositoryContext() {
Context ctx = CoreRuntimePlugin.getInstance().getContext();
return (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getRepositoryFactoryFromProvider()
*/
public IRepositoryFactory getRepositoryFactoryFromProvider() {
return this.repositoryFactoryFromProvider;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#setRepositoryFactoryFromProvider(org.talend.repository.model
* .IRepositoryFactory)
*/
public void setRepositoryFactoryFromProvider(IRepositoryFactory repositoryFactoryFromProvider) {
this.repositoryFactoryFromProvider = repositoryFactoryFromProvider;
}
private void checkFileName(String fileName, String pattern) {
if (!Pattern.matches(pattern, fileName)) {
// i18n
// throw new IllegalArgumentException("Label " + fileName + " does not match pattern " + pattern);
throw new IllegalArgumentException(Messages.getString(
"ProxyRepositoryFactory.illegalArgumentException.labelNotMatchPattern", new String[] { fileName, pattern })); //$NON-NLS-1$
}
}
/* hywang for 17295,need to migration refProjects when login using svn repository */
private void executeMigrations(Project mainProject, boolean beforeLogon, SubMonitor monitorWrap) {
this.repositoryFactoryFromProvider.executeMigrations(mainProject, beforeLogon, monitorWrap);
}
private boolean checkFileNameAndPath(Project project, Item item, String pattern, IPath path, boolean folder,
boolean... isImportItem) throws PersistenceException {
String fileName = item.getProperty().getLabel();
checkFileName(fileName, pattern);
// if the check comes from create item when import item, then no need to check the name availability
// since we already checked before.
if (isImportItem.length == 0) {
checkIfHaveDuplicateName(project, item, path);
}
return false;
}
private boolean checkIfHaveDuplicateName(Project project, Item item, IPath path) throws PersistenceException {
String name = item.getProperty().getLabel();
ERepositoryObjectType type = ERepositoryObjectType.getItemType(item);
if (type == ERepositoryObjectType.METADATA_CON_TABLE) {
// no check needed for table
return false;
}
boolean isAllowMultipleName = (type == ERepositoryObjectType.SQLPATTERNS || type == ERepositoryObjectType.METADATA_FILE_XML);
List<IRepositoryViewObject> list;
list = getAll(project, type, true, false);
IRepositoryViewObject duplicateNameObject = null;
for (IRepositoryViewObject current : list) {
if (name.equalsIgnoreCase(current.getProperty().getLabel())
&& item.getProperty().getId() != current.getProperty().getId()) {
// To check SQLPattern in same path. see bug 0005038: unable to add a SQLPattern into repository.
if (!isAllowMultipleName || current.getProperty().getItem().getState().getPath().equals(path.toPortableString())) {
// TDI-18224
if (current.getProperty() != null && item.getProperty() != null
&& !current.getProperty().getVersion().equals(item.getProperty().getVersion())) {
continue;
}
duplicateNameObject = current;
break;
}
}
}
if (duplicateNameObject != null) {
if (CommonsPlugin.isHeadless()) {
throw new IllegalArgumentException(Messages.getString(
"ProxyRepositoryFactory.illegalArgumentException.labeAlreadyInUse", new String[] { name })); //$NON-NLS-1$
} else {
Display display = Display.getCurrent();
if (display == null) {
display = Display.getDefault();
}
Shell currentShell = display.getActiveShell();
if (currentShell == null) {
currentShell = new Shell();
}
ITDQRepositoryService tdqRepService = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITDQRepositoryService.class)) {
tdqRepService = (ITDQRepositoryService) GlobalServiceRegister.getDefault().getService(
ITDQRepositoryService.class);
}
boolean isThrow = true;
if (tdqRepService != null && CoreRuntimePlugin.getInstance().isDataProfilePerspectiveSelected()) {
// change MessageBox to DeleteModelElementConfirmDialog
InputDialog inputDialog = tdqRepService.getInputDialog(item);
if (MessageDialog.OK == inputDialog.open()) {
String newName = inputDialog.getValue();
tdqRepService.changeElementName(item, newName);
isThrow = false;
}
} else {
MessageBox box = new MessageBox(currentShell, SWT.ICON_WARNING | SWT.OK | SWT.CANCEL);
box.setText(Messages.getString("ProxyRepositoryFactory.JobNameErroe")); //$NON-NLS-1$
box.setMessage(Messages.getString("ProxyRepositoryFactory.Label") + " " + name + " " + Messages.getString("ProxyRepositoryFactory.ReplaceJob") + Messages.getString("ProxyRepositoryFactory.ReplaceJobHazardDescription")); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$
if (box.open() == SWT.OK) {
deleteObjectPhysical(duplicateNameObject);
isThrow = false;
}
}
if (isThrow) {
throw new TalendInternalPersistenceException(Messages.getString(
"ProxyRepositoryFactory.illegalArgumentException.labeAlreadyInUse", new String[] { name })); //$NON-NLS-1$
}
return true;
}
}
return true;
}
private void checkFileNameAndPath(Project proejct, String label, String pattern, ERepositoryObjectType type, IPath path,
boolean folder) throws PersistenceException {
String fileName = label;
checkFileName(fileName, pattern);
}
public List<ConnectionItem> getMetadataConnectionsItem(Project project) throws PersistenceException {
return this.repositoryFactoryFromProvider.getMetadataConnectionsItem(project);
}
@Override
public List<ConnectionItem> getMetadataConnectionsItem() throws PersistenceException {
return getMetadataConnectionsItem(projectManager.getCurrentProject());
}
public List<ContextItem> getContextItem(Project project) throws PersistenceException {
return this.repositoryFactoryFromProvider.getContextItem(project);
}
@Override
public List<ContextItem> getContextItem() throws PersistenceException {
List<ContextItem> contextItems = getContextItem(projectManager.getCurrentProject());
if (contextItems == null) {
contextItems = new ArrayList<ContextItem>();
}
for (Project p : projectManager.getAllReferencedProjects()) {
List<ContextItem> rContextItems = getContextItem(p);
if (rContextItems != null) {
contextItems.addAll(rContextItems);
}
}
return contextItems;
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#isNameAvailable(org.talend.core.model.properties.Item,
* java.lang.String)
*/
@Override
public boolean isNameAvailable(Item item, String name, List<IRepositoryViewObject>... givenList) throws PersistenceException {
return isNameAvailable(projectManager.getCurrentProject(), item, name, givenList);
}
@Override
public boolean isNameAvailable(Project project, Item item, String name, List<IRepositoryViewObject>... givenList)
throws PersistenceException {
return this.repositoryFactoryFromProvider.isNameAvailable(project, item, name, givenList);
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#isPathValid(org.talend.core.model.repository.
* ERepositoryObjectType, org.eclipse.core.runtime.IPath, java.lang.String)
*/
@Override
public boolean isPathValid(ERepositoryObjectType type, IPath path, String label) throws PersistenceException {
return isPathValid(projectManager.getCurrentProject(), type, path, label);
}
@Override
public boolean isPathValid(Project proejct, ERepositoryObjectType type, IPath path, String label) throws PersistenceException {
return this.repositoryFactoryFromProvider.isPathValid(proejct, type, path, label);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#createProject(java.lang.String, java.lang.String,
* org.talend.core.model.temp.ECodeLanguage, org.talend.core.model.properties.User)
*/
@Override
public Project createProject(Project projectInfor) throws PersistenceException {
checkFileName(projectInfor.getLabel(), RepositoryConstants.PROJECT_PATTERN);
Project toReturn = this.repositoryFactoryFromProvider.createProject(projectInfor);
if (toReturn.isLocal()) {
IMigrationToolService service = (IMigrationToolService) GlobalServiceRegister.getDefault().getService(
IMigrationToolService.class);
service.initNewProjectTasks(toReturn);
}
return toReturn;
}
@Override
public void saveProject(Project project) throws PersistenceException {
repositoryFactoryFromProvider.saveProject(project);
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#createFolder(org.talend.core.model.repository.
* ERepositoryObjectType, org.eclipse.core.runtime.IPath, java.lang.String)
*/
@Override
public Folder createFolder(ERepositoryObjectType type, IPath path, String label) throws PersistenceException {
return createFolder(projectManager.getCurrentProject(), type, path, label);
}
@Override
public Folder createFolder(Project project, ERepositoryObjectType type, IPath path, String label) throws PersistenceException {
return createFolder(project, type, path, label, false);
}
@Override
public Folder createFolder(Project project, ERepositoryObjectType type, IPath path, String label, boolean isImportItem)
throws PersistenceException {
if (type.isDQItemType()) {
checkFileNameAndPath(project, label, RepositoryConstants.TDQ_ALL_ITEM_PATTERN, type, path, true);
} else if (type == ERepositoryObjectType.METADATA_FILE_XML) {
checkFileNameAndPath(project, label, RepositoryConstants.SIMPLE_FOLDER_PATTERN, type, path, true);
} else {
checkFileNameAndPath(project, label, RepositoryConstants.FOLDER_PATTERN, type, path, true);
}
Folder createFolder = this.repositoryFactoryFromProvider.createFolder(project, type, path, label, isImportItem);
if (type == ERepositoryObjectType.PROCESS || type == ERepositoryObjectType.JOBLET) {
fireRepositoryPropertyChange(ERepositoryActionName.FOLDER_CREATE.getName(), path, new Object[] { createFolder, type });
}
return createFolder;
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#deleteFolder(org.talend.core.model.repository.
* ERepositoryObjectType, org.eclipse.core.runtime.IPath)
*/
@Override
public synchronized void deleteFolder(ERepositoryObjectType type, IPath path) throws PersistenceException {
deleteFolder(projectManager.getCurrentProject(), type, path);
}
@Override
public synchronized void deleteFolder(Project project, ERepositoryObjectType type, IPath path) throws PersistenceException {
deleteFolder(projectManager.getCurrentProject(), type, path, false);
}
@Override
public synchronized void deleteFolder(Project project, ERepositoryObjectType type, IPath path, boolean fromEmptyRecycleBin)
throws PersistenceException {
this.repositoryFactoryFromProvider.deleteFolder(project, type, path, fromEmptyRecycleBin);
if (type == ERepositoryObjectType.PROCESS) {
fireRepositoryPropertyChange(ERepositoryActionName.FOLDER_DELETE.getName(), path, type);
}
if (type == ERepositoryObjectType.JOBLET) {
fireRepositoryPropertyChange(ERepositoryActionName.JOBLET_FOLDER_DELETE.getName(), path, type);
}
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#moveFolder(org.talend.core.model.repository.ERepositoryObjectType
* , org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath)
*/
@Override
public void moveFolder(ERepositoryObjectType type, IPath sourcePath, IPath targetPath) throws PersistenceException {
this.repositoryFactoryFromProvider.moveFolder(type, sourcePath, targetPath);
if (type == ERepositoryObjectType.PROCESS) {
fireRepositoryPropertyChange(ERepositoryActionName.FOLDER_MOVE.getName(), sourcePath, targetPath);
}
if (type == ERepositoryObjectType.JOBLET) {
fireRepositoryPropertyChange(ERepositoryActionName.JOBLET_FOLDER_MOVE.getName(), sourcePath, targetPath);
}
this.repositoryFactoryFromProvider.updateItemsPath(type, targetPath.append(sourcePath.lastSegment()));
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getNextId()
*/
@Override
public String getNextId() {
String nextId = this.repositoryFactoryFromProvider.getNextId();
// i18n
// log.trace("New ID generated on project [" + projectManager.getCurrentProject() + "] = " + nextId);
String str[] = new String[] { projectManager.getCurrentProject() + "", nextId + "" };//$NON-NLS-1$ //$NON-NLS-2$
log.trace(Messages.getString("ProxyRepositoryFactory.log.newIdGenerated", str)); //$NON-NLS-1$
return nextId;
}
public RootContainer<String, IRepositoryViewObject> getRoutineFromProject(Project project) throws PersistenceException {
return this.repositoryFactoryFromProvider.getRoutineFromProject(project);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getRecycleBinItems()
*/
@Override
public List<IRepositoryViewObject> getRecycleBinItems() throws PersistenceException {
return getRecycleBinItems(projectManager.getCurrentProject());
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#readProject()
*/
@Override
public Project[] readProject() throws PersistenceException, BusinessException {
// mzhao initialize the DQ model packages.
AbstractDQModelService dqModelService = CoreRuntimePlugin.getInstance().getDQModelService();
if (dqModelService != null) {
dqModelService.initTDQEMFResource();
}
return this.repositoryFactoryFromProvider.readProject();
}
@Override
public Project[] readProject(boolean unloadResource) throws PersistenceException, BusinessException {
return this.repositoryFactoryFromProvider.readProject(unloadResource);
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#renameFolder(org.talend.core.model.repository.
* ERepositoryObjectType, org.eclipse.core.runtime.IPath, java.lang.String)
*/
@Override
public void renameFolder(ERepositoryObjectType type, IPath path, String label) throws PersistenceException {
// if (path.lastSegment().equalsIgnoreCase(label)) {
// not supported to rename directly to another case.
// actually only possible way without it, would be to move to another temp folder, then rename again.
// (means 2 commits)
// to simplify for now, we don't allow to rename one folder to another case.
// return;
// }
this.repositoryFactoryFromProvider.renameFolder(type, path, label);
if (type == ERepositoryObjectType.PROCESS) {
fireRepositoryPropertyChange(ERepositoryActionName.FOLDER_RENAME.getName(), path, label);
}
if (type == ERepositoryObjectType.JOBLET) {
fireRepositoryPropertyChange(ERepositoryActionName.JOBLET_FOLDER_RENAME.getName(), path, label);
}
this.repositoryFactoryFromProvider.updateItemsPath(type, path.removeLastSegments(1).append(label));
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#deleteObject(org.talend.core.model.general.Project,
* org.talend.core.model.repository.IRepositoryViewObject)
*/
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#deleteObjectLogical(org.talend.core.model.repository.
* IRepositoryViewObject)
*/
@Override
public void deleteObjectLogical(IRepositoryViewObject objToDelete) throws PersistenceException, BusinessException {
deleteObjectLogical(projectManager.getCurrentProject(), objToDelete);
}
@Override
public void deleteObjectLogical(Project project, IRepositoryViewObject objToDelete) throws PersistenceException,
BusinessException {
// RepositoryViewObject is dynamic, so force to use in all case the RepositoryObject with fixed object.
IRepositoryViewObject object = new RepositoryObject(objToDelete.getProperty());
checkAvailability(object);
this.repositoryFactoryFromProvider.deleteObjectLogical(project, object);
// unlock(objToDelete);
// i18n
// log.debug("Logical deletion [" + objToDelete + "] by " + getRepositoryContext().getUser() + ".");
String str[] = new String[] { object + "", getRepositoryContext().getUser() + "" };//$NON-NLS-1$ //$NON-NLS-2$
log.debug(Messages.getString("ProxyRepositoryFactory.log.logicalDeletion", str)); //$NON-NLS-1$
boolean isExtendPoint = false;
ERepositoryObjectType repositoryObjectType = object.getRepositoryObjectType();
for (IRepositoryContentHandler handler : RepositoryContentManager.getHandlers()) {
isExtendPoint = handler.isRepObjType(repositoryObjectType);
if (isExtendPoint == true) {
break;
}
}
// TODO this need to be refactered after M2.
if (isExtendPoint || object.getRepositoryObjectType() == ERepositoryObjectType.PROCESS
|| object.getRepositoryObjectType() == ERepositoryObjectType.JOBLET
|| object.getRepositoryObjectType() == ERepositoryObjectType.ROUTINES
|| object.getRepositoryObjectType() == ERepositoryObjectType.JOB_SCRIPT) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_DELETE_TO_RECYCLE_BIN.getName(), null, object);
}
if (objToDelete.getRepositoryObjectType() == ERepositoryObjectType.BUSINESS_PROCESS) {
fireRepositoryPropertyChange(ERepositoryActionName.BUSINESS_DELETE_TO_RECYCLE_BIN.getName(), null, object);
}
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#deleteObjectPhysical(org.talend.core.model.repository.
* IRepositoryViewObject)
*/
@Override
public void forceDeleteObjectPhysical(IRepositoryViewObject objToDelete, String version) throws PersistenceException {
this.repositoryFactoryFromProvider.deleteObjectPhysical(projectManager.getCurrentProject(), objToDelete, version);
// i18n
// log.info("Physical deletion [" + objToDelete + "] by " + getRepositoryContext().getUser() + ".");
String str[] = new String[] { objToDelete.toString(), getRepositoryContext().getUser().toString() };
log.info(Messages.getString("ProxyRepositoryFactory.log.physicalDeletion", str)); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#deleteObjectPhysical(org.talend.core.model.repository.
* IRepositoryViewObject)
*/
@Override
public void deleteObjectPhysical(IRepositoryViewObject objToDelete) throws PersistenceException {
deleteObjectPhysical(objToDelete, null);
}
@Override
public void deleteObjectPhysical(IRepositoryViewObject objToDelete, String version) throws PersistenceException {
deleteObjectPhysical(projectManager.getCurrentProject(), objToDelete, version);
}
@Override
public void deleteObjectPhysical(Project project, IRepositoryViewObject objToDelete) throws PersistenceException {
deleteObjectPhysical(project, objToDelete, null);
}
@Override
public void deleteObjectPhysical(Project project, IRepositoryViewObject objToDelete, String version)
throws PersistenceException {
deleteObjectPhysical(project, objToDelete, version, false);
}
@Override
public void deleteObjectPhysical(Project project, IRepositoryViewObject objToDelete, String version,
boolean fromEmptyRecycleBin) throws PersistenceException {
if (project == null || objToDelete == null || objToDelete.getProperty() == null) {
return;
}
// RepositoryViewObject is dynamic, so force to use in all case the RepositoryObject with fixed object.
IRepositoryViewObject object = new RepositoryObject(objToDelete.getProperty());
boolean isExtendPoint = false;
ERepositoryObjectType repositoryObjectType = object.getRepositoryObjectType();
for (IRepositoryContentHandler handler : RepositoryContentManager.getHandlers()) {
isExtendPoint = handler.isRepObjType(repositoryObjectType);
if (isExtendPoint == true) {
if (repositoryObjectType == handler.getProcessType()) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_DELETE_FOREVER.getName(), null, object);
coreService.removeJobLaunch(object);
}
if (repositoryObjectType == handler.getCodeType()) {
try {
coreService.deleteBeanfile(object);
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
break;
}
}
if (repositoryObjectType == ERepositoryObjectType.PROCESS || repositoryObjectType == ERepositoryObjectType.JOBLET
|| repositoryObjectType == ERepositoryObjectType.ROUTINES) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_DELETE_FOREVER.getName(), null, object);
if (repositoryObjectType == ERepositoryObjectType.PROCESS) {
// delete the job launch, for bug 8878
coreService.removeJobLaunch(object);
}
if (repositoryObjectType == ERepositoryObjectType.ROUTINES) {
try {
coreService.deleteRoutinefile(object);
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
}
if (repositoryObjectType == ERepositoryObjectType.BUSINESS_PROCESS) {
fireRepositoryPropertyChange(ERepositoryActionName.BUSINESS_DELETE_FOREVER.getName(), null, object);
}
if (repositoryObjectType == ERepositoryObjectType.PROCESS) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IESBService.class)) {
IESBService service = (IESBService) GlobalServiceRegister.getDefault().getService(IESBService.class);
if (service != null) {
service.refreshOperationLabel(object.getProperty().getId());
}
}
}
this.repositoryFactoryFromProvider.deleteObjectPhysical(project, object, version, fromEmptyRecycleBin);
// i18n
// log.info("Physical deletion [" + objToDelete + "] by " + getRepositoryContext().getUser() + ".");
String str[] = new String[] { object.toString(), getRepositoryContext().getUser().toString() };
log.info(Messages.getString("ProxyRepositoryFactory.log.physicalDeletion", str)); //$NON-NLS-1$ }
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#restoreObject(org.talend.core.model.repository.
* IRepositoryViewObject , org.eclipse.core.runtime.IPath)
*/
@Override
public void restoreObject(IRepositoryViewObject objToRestore, IPath path) throws PersistenceException, BusinessException {
if (ProxyRepositoryFactory.getInstance().isUserReadOnlyOnCurrentProject()) {
throw new BusinessException(Messages.getString("ProxyRepositoryFactory.bussinessException.itemNonModifiable")); //$NON-NLS-1$
}
this.repositoryFactoryFromProvider.restoreObject(objToRestore, path);
unlock(objToRestore);
// i18n
// log.debug("Restoration [" + objToRestore + "] by " + getRepositoryContext().getUser() + " to \"/" + path +
// "\".");
String str[] = new String[] { objToRestore + "", getRepositoryContext().getUser() + "", path + "" };//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
log.debug(Messages.getString("ProxyRepositoryFactory.log.Restoration", str)); //$NON-NLS-1$
boolean isExtendPoint = false;
ERepositoryObjectType repositoryObjectType = objToRestore.getRepositoryObjectType();
for (IRepositoryContentHandler handler : RepositoryContentManager.getHandlers()) {
isExtendPoint = handler.isRepObjType(repositoryObjectType);
if (isExtendPoint == true) {
break;
}
}
if (isExtendPoint || objToRestore.getRepositoryObjectType() == ERepositoryObjectType.PROCESS
|| objToRestore.getRepositoryObjectType() == ERepositoryObjectType.JOBLET
|| objToRestore.getRepositoryObjectType() == ERepositoryObjectType.ROUTINES) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_RESTORE.getName(), null, objToRestore);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#moveObject(org.talend.core.model.general.Project,
* org.talend.core.model.repository.IRepositoryViewObject)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#moveObject(org.talend.core.model.repository.IRepositoryViewObject
* , org.eclipse.core.runtime.IPath)
*/
@Override
public void moveObject(IRepositoryViewObject objToMove, IPath targetPath, IPath... sourcePath) throws PersistenceException,
BusinessException {
checkAvailability(objToMove);
// avoid to check the name, since it's only one object moved, from one folder to another one, of course the name
// don't exist already.
// Item item = objToMove.getProperty().getItem();
// Project project = new Project(projectManager.getProject(item));
// checkFileNameAndPath(project, item, RepositoryConstants.getPattern(objToMove.getType()), targetPath, false);
this.repositoryFactoryFromProvider.moveObject(objToMove, targetPath);
// i18n
// log.debug("Move [" + objToMove + "] to \"" + path + "\".");
String str[] = new String[] { objToMove + "", targetPath + "" }; //$NON-NLS-1$ //$NON-NLS-2$
log.debug(Messages.getString("ProxyRepositoryFactory.log.move", str)); //$NON-NLS-1$
// unlock(getItem(objToMove));
if (objToMove.getRepositoryObjectType() == ERepositoryObjectType.PROCESS) {
if (sourcePath != null && sourcePath.length == 1) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_MOVE.getName(), objToMove, new IPath[] { sourcePath[0],
targetPath });
}
}
if (objToMove.getRepositoryObjectType() == ERepositoryObjectType.JOBLET) {
if (sourcePath != null && sourcePath.length == 1) {
fireRepositoryPropertyChange(ERepositoryActionName.JOBLET_MOVE.getName(), objToMove, new IPath[] { sourcePath[0],
targetPath });
}
}
}
// TODO SML Renommer et finir la m�thode et la plugger dans toutes les m�thodes
private void checkAvailability(IRepositoryViewObject objToMove) throws BusinessException {
if (!isPotentiallyEditable(objToMove) || ProxyRepositoryFactory.getInstance().isUserReadOnlyOnCurrentProject()) {
throw new BusinessException(Messages.getString("ProxyRepositoryFactory.bussinessException.itemNonModifiable")); //$NON-NLS-1$
}
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#lock(org.talend.core.model.repository.IRepositoryViewObject)
*/
@Override
public void lock(IRepositoryViewObject obj) throws PersistenceException, LoginException {
lock(getItem(obj));
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#lock(org.talend.core.model.properties.Item)
*/
@Override
public void lock(Item item) throws PersistenceException, LoginException {
// getStatus(item)
if (getStatus(item).isPotentiallyEditable()) {
this.repositoryFactoryFromProvider.lock(item);
//
if ((item instanceof JobletProcessItem || item instanceof ProcessItem)
&& getStatus(item) == ERepositoryStatus.LOCK_BY_USER) {
String docId = item.getProperty().getId() + "doc";
IRepositoryViewObject repositoryViewObject = this.repositoryFactoryFromProvider.getLastVersion(
projectManager.getCurrentProject(), docId);
if (repositoryViewObject != null) {
Property property = repositoryViewObject.getProperty();
Item documentationItem = property.getItem();
this.repositoryFactoryFromProvider.lock(documentationItem);
}
}
notifyLock(item, true);
// i18n
// log.debug("Lock [" + item + "] by \"" + getRepositoryContext().getUser() + "\".");
String str[] = new String[] { item.toString(), getRepositoryContext().getUser().toString() };
log.debug(Messages.getString("ProxyRepositoryFactory.log.lock", str)); //$NON-NLS-1$
}
}
/**
* DOC sgandon Comment method "notifyLock".
*
* @param item
*/
private void notifyLock(Item item, boolean lock) {
Bundle bundle = FrameworkUtil.getBundle(this.getClass());
if (bundle != null) {
BundleContext bundleContext = CoreRepositoryPlugin.getDefault().getBundle().getBundleContext();
ServiceReference ref = bundleContext != null ? bundleContext.getServiceReference(EventAdmin.class.getName()) : null;
if (ref != null) {
@SuppressWarnings("null")
EventAdmin eventAdmin = (EventAdmin) bundleContext.getService(ref);
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(Constant.ITEM_EVENT_PROPERTY_KEY, item);
Event lockEvent = new Event(Constant.REPOSITORY_ITEM_EVENT_PREFIX
+ (lock ? Constant.ITEM_LOCK_EVENT_SUFFIX : Constant.ITEM_UNLOCK_EVENT_SUFFIX), properties);
eventAdmin.postEvent(lockEvent);
}
}// else no bundle for this, should never happend.
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getAllVersion(java.lang.String)
*/
@Override
public List<IRepositoryViewObject> getAllVersion(String id) throws PersistenceException {
List<IRepositoryViewObject> allVersion = getAllRefVersion(projectManager.getCurrentProject(), id);
return allVersion;
}
@Override
public List<IRepositoryViewObject> getAllVersion(String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
List<IRepositoryViewObject> allVersion = getAllRefVersion(projectManager.getCurrentProject(), id, folderPath, type);
return allVersion;
}
public List<IRepositoryViewObject> getAllRefVersion(Project project, String id) throws PersistenceException {
List<IRepositoryViewObject> allVersion = getAllVersion(project, id, false);
if (allVersion.isEmpty()) {
for (Project p : projectManager.getReferencedProjects(project)) {
allVersion = getAllRefVersion(p, id);
if (!allVersion.isEmpty()) {
break;
}
}
}
return allVersion;
}
public List<IRepositoryViewObject> getAllRefVersion(Project project, String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
List<IRepositoryViewObject> allVersion = getAllVersion(project, id, folderPath, type);
if (allVersion.isEmpty()) {
for (Project p : projectManager.getReferencedProjects(project)) {
allVersion = getAllRefVersion(p, id, folderPath, type);
if (!allVersion.isEmpty()) {
break;
}
}
}
return allVersion;
}
@Override
public List<IRepositoryViewObject> getAllVersion(Project project, String id, boolean avoidSaveProject)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getAllVersion(project, id, avoidSaveProject);
}
public List<IRepositoryViewObject> getAllVersion(Project project, String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getAllVersion(project, id, folderPath, type);
}
@Override
public IRepositoryViewObject getLastVersion(Project project, String id) throws PersistenceException {
return this.repositoryFactoryFromProvider.getLastVersion(project, id);
}
@Override
public IRepositoryViewObject getLastVersion(Project project, String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getLastVersion(project, id, folderPath, type);
}
public IRepositoryViewObject getLastVersion(String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getLastVersion(projectManager.getCurrentProject(), id, folderPath, type);
}
@Override
public IRepositoryViewObject getLastVersion(String id) throws PersistenceException {
IRepositoryViewObject lastRefVersion = getLastRefVersion(projectManager.getCurrentProject(), id);
return lastRefVersion;
}
public IRepositoryViewObject getLastRefVersion(Project project, String id) throws PersistenceException {
IRepositoryViewObject lastVersion = getLastVersion(project, id);
if (lastVersion == null) {
for (Project p : projectManager.getReferencedProjects(project)) {
lastVersion = getLastRefVersion(p, id);
if (lastVersion != null) {
break;
}
}
}
return lastVersion;
}
@Override
public List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type) throws PersistenceException {
return getAll(project, type, false);
}
@Override
public List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getAll(project, type, withDeleted, false);
}
@Override
public List<IRepositoryViewObject> getAll(Project project, ERepositoryObjectType type, boolean withDeleted,
boolean allVersions) throws PersistenceException {
return this.repositoryFactoryFromProvider.getAll(project, type, withDeleted, allVersions);
}
@Override
public List<IRepositoryViewObject> getAll(ERepositoryObjectType type) throws PersistenceException {
return getAll(projectManager.getCurrentProject(), type, false);
}
@Override
public List<IRepositoryViewObject> getAll(ERepositoryObjectType type, boolean withDeleted) throws PersistenceException {
return this.repositoryFactoryFromProvider.getAll(projectManager.getCurrentProject(), type, withDeleted, false);
}
@Override
public List<IRepositoryViewObject> getAll(ERepositoryObjectType type, boolean withDeleted, boolean allVersions)
throws PersistenceException {
return this.repositoryFactoryFromProvider.getAll(projectManager.getCurrentProject(), type, withDeleted, allVersions);
}
@Override
public List<String> getFolders(ERepositoryObjectType type) throws PersistenceException {
return getFolders(projectManager.getCurrentProject(), type);
}
public List<String> getFolders(Project project, ERepositoryObjectType type) throws PersistenceException {
List<String> toReturn = new ArrayList<String>();
String[] split = ERepositoryObjectType.getFolderName(type).split("/"); //$NON-NLS-1$
String labelType = split[split.length - 1];
FolderItem folderItem = getFolderItem(project, type, new Path(""));//$NON-NLS-1$
addChildren(toReturn, folderItem, labelType, ""); //$NON-NLS-1$
return toReturn;
}
private void addChildren(List<String> target, FolderItem source, String type, String path) {
if (source.getType() == FolderType.FOLDER_LITERAL) {
// for bug 9352: .svnlog folder should not be visible in wizards
EObject obj = source.getParent();
if (obj != null && obj instanceof FolderItemImpl) {
target.add(path + source.getProperty().getLabel());
for (Object current : source.getChildren()) {
if (current instanceof FolderItem) {
addChildren(target, (FolderItem) current, type, path + source.getProperty().getLabel() + "/"); //$NON-NLS-1$
}
}
}
}
if (source.getType() == FolderType.SYSTEM_FOLDER_LITERAL || source.getType() == FolderType.STABLE_SYSTEM_FOLDER_LITERAL) {
boolean match = source.getProperty().getLabel().equals(type);
for (Object current : source.getChildren()) {
if (current instanceof FolderItem) {
FolderItem currentChild = (FolderItem) current;
if (currentChild.getType() == FolderType.FOLDER_LITERAL && match) {
addChildren(target, currentChild, type, path);
} else if (currentChild.getType() == FolderType.SYSTEM_FOLDER_LITERAL
|| currentChild.getType() == FolderType.STABLE_SYSTEM_FOLDER_LITERAL) {
addChildren(target, currentChild, type, path);
}
}
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getDocumentationStatus()
*/
@Override
public List<Status> getDocumentationStatus() throws PersistenceException {
return this.repositoryFactoryFromProvider.getDocumentationStatus();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getTechnicalStatus()
*/
@Override
public List<Status> getTechnicalStatus() throws PersistenceException {
return this.repositoryFactoryFromProvider.getTechnicalStatus();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getTechnicalStatus()
*/
// public List<SpagoBiServer> getSpagoBiServer() throws PersistenceException {
// return this.repositoryFactoryFromProvider.getSpagoBiServer();
// }
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#setDocumentationStatus(java.util.List)
*/
@Override
public void setDocumentationStatus(List<Status> list) throws PersistenceException {
this.repositoryFactoryFromProvider.setDocumentationStatus(list);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#forceCreate(org.talend.core.model.properties.Item,
* org.eclipse.core.runtime.IPath)
*/
@Override
public void forceCreate(Item item, IPath path) throws PersistenceException {
forceCreate(projectManager.getCurrentProject(), item, path);
}
@Override
public void forceCreate(Project project, Item item, IPath path) throws PersistenceException {
this.repositoryFactoryFromProvider.create(project, item, path);
}
@Override
public void createParentFoldersRecursively(ERepositoryObjectType itemType, IPath path) throws PersistenceException {
createParentFoldersRecursively(projectManager.getCurrentProject(), itemType, path);
}
@Override
public void createParentFoldersRecursively(Project project, ERepositoryObjectType itemType, IPath path)
throws PersistenceException {
createParentFoldersRecursively(project, itemType, path, false);
}
@Override
public void createParentFoldersRecursively(Project project, ERepositoryObjectType itemType, IPath path, boolean isImportItem)
throws PersistenceException {
List<String> folders = getFolders(project, itemType);
for (int i = 0; i < path.segmentCount(); i++) {
IPath parentPath = path.removeLastSegments(path.segmentCount() - i);
String folderLabel = path.segment(i);
String folderName = parentPath.append(folderLabel).toString();
if (!folders.contains(folderName)) {
createFolder(project, itemType, parentPath, folderLabel);
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#setTechnicalStatus(java.util.List)
*/
@Override
public void setTechnicalStatus(List<Status> list) throws PersistenceException {
this.repositoryFactoryFromProvider.setTechnicalStatus(list);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#setSpagoBiServer(java.util.List)
*/
@Override
public void setSpagoBiServer(List<SpagoBiServer> list) throws PersistenceException {
this.repositoryFactoryFromProvider.setSpagoBiServer(list);
}
@Override
public void setMigrationTasksDone(Project project, List<String> list) throws PersistenceException {
this.repositoryFactoryFromProvider.setMigrationTasksDone(project, list);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#isServerValid()
*/
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#isServerValid()
*/
// public String isServerValid() {
// return this.repositoryFactoryFromProvider.isServerValid();
// }
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#create(org.talend.core.model.properties.Item,
* org.eclipse.core.runtime.IPath)
*/
@Override
public void create(Item item, IPath path, boolean... isImportItem) throws PersistenceException {
create(projectManager.getCurrentProject(), item, path, isImportItem);
}
@Override
public void create(Project project, Item item, IPath path, boolean... isImportItem) throws PersistenceException {
boolean isOherProcess = false;
for (IRepositoryContentHandler handler : RepositoryContentManager.getHandlers()) {
isOherProcess = handler.isProcess(item);
if (isOherProcess) {
break;
}
}
if (isOherProcess || item instanceof ProcessItem) {
try {
coreService.checkJob(item.getProperty().getLabel());
} catch (BusinessException e) {
throw new PersistenceException(e);
} catch (RuntimeException e) {
// don't do anything
}
}
checkFileNameAndPath(project, item, RepositoryConstants.getPattern(ERepositoryObjectType.getItemType(item)), path, false,
isImportItem);
this.repositoryFactoryFromProvider.create(project, item, path, isImportItem);
if ((item instanceof ProcessItem || item instanceof JobletProcessItem) && (isImportItem.length == 0)) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_CREATE.getName(), null, item);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#save(org.talend.core.model.properties.Item)
*/
@Override
public void save(Item item, boolean... isMigrationTask) throws PersistenceException {
save(projectManager.getCurrentProject(), item, isMigrationTask);
}
@Override
public void save(Project project, Item item, boolean... isMigrationTask) throws PersistenceException {
this.repositoryFactoryFromProvider.save(project, item);
if ((item instanceof ProcessItem || item instanceof JobletProcessItem)
&& (isMigrationTask == null || isMigrationTask.length == 0)) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_SAVE.getName(), null, item);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#save(org.talend.core.model.properties.Property)
*/
@Override
public void save(Property property, String... originalNameAndVersion) throws PersistenceException {
save(projectManager.getCurrentProject(), property, originalNameAndVersion);
}
@Override
public void save(Project project, Property property, String... originalNameAndVersion) throws PersistenceException {
this.repositoryFactoryFromProvider.save(project, property);
if (property.getItem() instanceof ProcessItem || property.getItem() instanceof JobletProcessItem) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_PROPERTIES_CHANGE.getName(), originalNameAndVersion, property);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#copy(org.talend.core.model.properties.Item,
* org.eclipse.core.runtime.IPath)
*/
@Override
public Item copy(Item sourceItem, IPath targetPath) throws PersistenceException, BusinessException {
if (sourceItem instanceof ProcessItem) {
try {
coreService.checkJob(sourceItem.getProperty().getLabel());
} catch (BusinessException e) {
throw new PersistenceException(e);
} catch (RuntimeException e) {
// don't do anything
}
}
Item targetItem = this.repositoryFactoryFromProvider.copy(sourceItem, targetPath);
if (sourceItem instanceof ProcessItem || sourceItem instanceof JobletProcessItem) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_COPY.getName(), sourceItem, targetItem);
}
return targetItem;
}
@Override
public Item copy(Item sourceItem, IPath targetPath, boolean changeLabelWithCopyPrefix) throws PersistenceException,
BusinessException {
if (sourceItem instanceof ProcessItem) {
try {
coreService.checkJob(sourceItem.getProperty().getLabel());
} catch (BusinessException e) {
throw new PersistenceException(e);
} catch (RuntimeException e) {
// don't do anything
}
}
Item targetItem = this.repositoryFactoryFromProvider.copy(sourceItem, targetPath, changeLabelWithCopyPrefix);
// if ((sourceItem instanceof ProcessItem || sourceItem instanceof JobletProcessItem)) {
// fireRepositoryPropertyChange(ERepositoryActionName.JOB_COPY.getName(), sourceItem, targetItem);
// }
return targetItem;
}
@Override
public void saveCopy(Item sourceItem, Item targetItem) {
fireRepositoryPropertyChange(ERepositoryActionName.JOB_COPY.getName(), sourceItem, targetItem);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#reload(org.talend.core.model.properties.Property)
*/
@Override
public Property reload(Property property) throws PersistenceException {
return this.repositoryFactoryFromProvider.reload(property);
}
public Property reload(Property property, IFile file) throws PersistenceException {
return this.repositoryFactoryFromProvider.reload(property);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#unlock(org.talend.core.model.general.Project,
* org.talend.core.model.repository.IRepositoryViewObject)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#unlock(org.talend.core.model.repository.IRepositoryViewObject
* )
*/
@Override
public void unlock(IRepositoryViewObject obj) throws PersistenceException, LoginException {
unlock(getItem(obj));
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#unlock(org.talend.core.model.properties.Item)
*/
@Override
public void unlock(Item obj) throws PersistenceException, LoginException {
if (!(obj instanceof FolderItem) && (obj.eResource() == null || obj.getProperty().eResource() == null)) {
// item has been unloaded
obj = getUptodateProperty(obj.getProperty()).getItem();
}
if (getStatus(obj) == ERepositoryStatus.LOCK_BY_USER || obj instanceof JobletDocumentationItem
|| obj instanceof JobDocumentationItem) {
Date commitDate = obj.getState().getCommitDate();
Date modificationDate = obj.getProperty().getModificationDate();
if (modificationDate == null || commitDate == null || modificationDate.before(commitDate)) {
this.repositoryFactoryFromProvider.unlock(obj);
//
if (obj instanceof JobletProcessItem || obj instanceof ProcessItem) {
String docId = obj.getProperty().getId() + "doc";
IRepositoryViewObject repositoryViewObject = this.repositoryFactoryFromProvider.getLastVersion(
projectManager.getCurrentProject(), docId);
if (repositoryViewObject != null) {
Property property = repositoryViewObject.getProperty();
Item documentationItem = property.getItem();
this.repositoryFactoryFromProvider.unlock(documentationItem);
}
}
notifyLock(obj, false);
// i18n
// log.debug("Unlock [" + obj + "] by \"" + getRepositoryContext().getUser() + "\".");
String str[] = new String[] { obj.toString(), getRepositoryContext().getUser().toString() };
log.debug(Messages.getString("ProxyRepositoryFactory.log.unlock", str)); //$NON-NLS-1$
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#findUser(org.talend.core.model.general.Project)
*/
// public boolean doesLoggedUserExist() throws PersistenceException {
// return this.repositoryFactoryFromProvider.doesLoggedUserExist();
// }
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#createUser(org.talend.core.model.general.Project)
*/
// public void createUser() throws PersistenceException {
// this.repositoryFactoryFromProvider.createUser();
// }
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#initialize()
*/
@Override
public void initialize() throws PersistenceException {
this.repositoryFactoryFromProvider.initialize();
}
/**
* DOC smallet Comment method "emptyTempFolder".
*
* @param project
* @throws PersistenceException
*/
private void emptyTempFolder(Project project) throws PersistenceException {
long start = System.currentTimeMillis();
IProject fsProject = ResourceModelUtils.getProject(project);
IFolder folder = ResourceUtils.getFolder(fsProject, RepositoryConstants.TEMP_DIRECTORY, true);
int nbResourcesDeleted = ResourceUtils.emptyFolder(folder);
long elapsedTime = System.currentTimeMillis() - start;
log.trace(Messages.getString("ProxyRepositoryFactory.log.tempFolderEmptied", nbResourcesDeleted, elapsedTime)); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#getStatus(org.talend.core.model.properties.Item)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#getStatus(org.talend.core.model.repository.IRepositoryViewObject
* )
*/
@Override
public ERepositoryStatus getStatus(IRepositoryViewObject obj) {
if (obj instanceof ISubRepositoryObject) {
ISubRepositoryObject subRepositoryObject = (ISubRepositoryObject) obj;
if (SubItemHelper.isDeleted(subRepositoryObject.getAbstractMetadataObject())) {
return ERepositoryStatus.DELETED;
}
}
if (obj instanceof RepositoryViewObject) {
return obj.getRepositoryStatus();
}
return getStatus(getItem(obj));
}
@Override
@Deprecated
public boolean isDeleted(MetadataTable table) {
// TODO SML/MHE Remove when table are items
if (TableHelper.isDeleted(table)) {
return true;
}
return false;
}
@Override
public boolean isUserReadOnlyOnCurrentProject() {
return this.repositoryFactoryFromProvider.isUserReadOnlyOnCurrentProject();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getStatus(org.talend.core.model.properties.Item)
*/
@Override
public ERepositoryStatus getStatus(Item item) {
ERepositoryStatus toReturn;
toReturn = this.repositoryFactoryFromProvider.getStatus(item);
if (toReturn != ERepositoryStatus.DELETED
&& (isUserReadOnlyOnCurrentProject() || !projectManager.isInCurrentMainProject(item))) {
return ERepositoryStatus.READ_ONLY;
}
return toReturn;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#getStatus(org.talend.core.model.properties.InformationLevel)
*/
@Override
public ERepositoryStatus getStatus(InformationLevel level) {
if (level.getValue() == InformationLevel.WARN) {
return ERepositoryStatus.WARN;
} else if (level.getValue() == InformationLevel.ERROR) {
return ERepositoryStatus.ERROR;
}
return ERepositoryStatus.DEFAULT;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IRepositoryFactory#getStatusAndLockIfPossible(org.talend.core.model.properties.Item)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#isEditableAndLockIfPossible(org.talend.core.model.properties
* .Item)
*/
@Override
public boolean isEditableAndLockIfPossible(Item item) {
if (!projectManager.isInCurrentMainProject(item)) {
return false;
}
ERepositoryStatus status = getStatus(item);
if (status.isPotentiallyEditable()) {
try {
lock(item);
} catch (PersistenceException e) {
MessageBoxExceptionHandler.process(e);
} catch (LoginException e) {
MessageBoxExceptionHandler.process(e);
}
status = getStatus(item);
}
return status.isEditable();
}
// public boolean isLastVersion(Item item) {
// if (item.getProperty() != null) {
// try {
// List<IRepositoryViewObject> allVersion = ProxyRepositoryFactory.getInstance().getAllVersion(
// item.getProperty().getId());
// if (allVersion != null && !allVersion.isEmpty()) {
// if (allVersion.get(allVersion.size() - 1).getVersion().equals(item.getProperty().getVersion())) {
// return true;
// }
// }
// } catch (PersistenceException e) {
// ExceptionHandler.process(e);
// }
// }
// return false;
// }
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IRepositoryFactory#isEditable(org.talend.core.model.repository.IRepositoryViewObject)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#isEditableAndLockIfPossible(org.talend.core.model.repository
* .IRepositoryViewObject)
*/
@Override
public boolean isEditableAndLockIfPossible(IRepositoryViewObject obj) {
if (obj instanceof ISubRepositoryObject) {
AbstractMetadataObject abstractMetadataObject = ((ISubRepositoryObject) obj).getAbstractMetadataObject();
if (SubItemHelper.isDeleted(abstractMetadataObject)) {
return false;
} else {
return isEditableAndLockIfPossible(getItem(obj));
}
} else {
return isEditableAndLockIfPossible(getItem(obj));
}
}
@Override
public org.talend.core.model.properties.Project getProject(Item item) {
EObject object = EcoreUtil.getRootContainer(item);
if (object != null && object instanceof org.talend.core.model.properties.Project) {
return (org.talend.core.model.properties.Project) object;
}
return projectManager.getCurrentProject().getEmfProject();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IRepositoryFactory#isPotentiallyEditable(org.talend.core.model.properties.Item)
*/
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#isPotentiallyEditable(org.talend.core.model.properties.Item)
*/
private boolean isPotentiallyEditable(Item item) {
if (!projectManager.isInCurrentMainProject(item)) {
return false;
}
ERepositoryStatus status = getStatus(item);
return status.isPotentiallyEditable();
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IRepositoryFactory#isPotentiallyEditable(org.talend.core.model.repository.
* IRepositoryViewObject)
*/
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#isPotentiallyEditable(org.talend.core.model.repository.
* IRepositoryViewObject)
*/
@Override
public boolean isPotentiallyEditable(IRepositoryViewObject obj) {
// referenced project items can't be edited.
if (!projectManager.getCurrentProject().getLabel().equals(obj.getProjectLabel())) {
return false;
}
if (obj instanceof ISubRepositoryObject) {
AbstractMetadataObject abstractMetadataObject = ((ISubRepositoryObject) obj).getAbstractMetadataObject();
if (SubItemHelper.isDeleted(abstractMetadataObject)) {
return true;
} else {
if (obj instanceof RepositoryViewObject) {
return obj.getRepositoryStatus().isPotentiallyEditable();
} else {
return isPotentiallyEditable(getItem(obj));
}
}
} else {
if (obj instanceof RepositoryViewObject) {
return obj.getRepositoryStatus().isPotentiallyEditable();
} else {
return isPotentiallyEditable(getItem(obj));
}
}
}
private Item getItem(IRepositoryViewObject obj) {
return obj.getProperty().getItem();
}
@Override
public List<org.talend.core.model.properties.Project> getReferencedProjects(Project project) {
return this.repositoryFactoryFromProvider.getReferencedProjects(project);
}
@Override
public Boolean hasChildren(Object parent) {
return repositoryFactoryFromProvider.hasChildren(parent);
}
@Override
public synchronized List<ModuleNeeded> getModulesNeededForJobs() throws PersistenceException {
return this.repositoryFactoryFromProvider.getModulesNeededForJobs();
}
/**
* DOC tang Comment method "logOnProject".
*
* @param project
* @param monitorWrap
* @throws PersistenceException
* @throws LoginException
*/
public void logOnProject(Project project, IProgressMonitor monitor) throws LoginException, PersistenceException {
try {
TimeMeasure.display = CommonsPlugin.isDebugMode();
TimeMeasure.displaySteps = CommonsPlugin.isDebugMode();
TimeMeasure.measureActive = CommonsPlugin.isDebugMode();
TimeMeasure.begin("logOnProject");
try {
System.getProperties().put("ReadOnlyUser", Boolean.FALSE.toString());
fullLogonFinished = false;
SubMonitor subMonitor = SubMonitor.convert(monitor, MAX_TASKS);
SubMonitor currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.logonInProgress"), 1); //$NON-NLS-1$
LanguageManager.reset();
getRepositoryContext().setProject(project);
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.initializeProjectConnection"), 1); //$NON-NLS-1$
this.repositoryFactoryFromProvider.beforeLogon(project);
// monitorWrap.worked(1);
TimeMeasure.step("logOnProject", "beforeLogon");
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask("Execute before logon migrations tasks", 1); //$NON-NLS-1$
executeMigrations(project, true, currentMonitor);
// monitorWrap.worked(1);
TimeMeasure.step("logOnProject", "executeMigrations(beforeLogonTasks)");
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.logonInProgress"), 1); //$NON-NLS-1$
this.repositoryFactoryFromProvider.logOnProject(project);
// monitorWrap.worked(1);
TimeMeasure.step("logOnProject", "logOnProject");
emptyTempFolder(project);
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.load.componnents"), 1); //$NON-NLS-1$
coreService.componentsReset();
coreService.initializeComponents(currentMonitor);
// monitorWrap.worked(1);
TimeMeasure.step("logOnProject", "initializeComponents");
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.exec.migration.tasks"), 1); //$NON-NLS-1$
executeMigrations(project, false, currentMonitor);
TimeMeasure.step("logOnProject", "executeMigrations(afterLogonTasks)");
// clean workspace
coreService.deleteAllJobs(false);
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.synch.repo.items"), 1); //$NON-NLS-1$
try {
coreService.syncAllRoutines();
// PTODO need refactor later, this is not good, I think
coreService.syncAllBeans();
} catch (SystemException e1) {
//
}
// rules
if (PluginChecker.isRulesPluginLoaded()) {
coreService.syncAllRules();
}
TimeMeasure.step("logOnProject", "sync repository (routines/rules/beans)");
currentMonitor = subMonitor.newChild(1, SubMonitor.SUPPRESS_NONE);
currentMonitor.beginTask(Messages.getString("ProxyRepositoryFactory.synchronizeLibraries"), 1); //$NON-NLS-1$
coreService.syncLibraries(currentMonitor);
TimeMeasure.step("logOnProject", "sync components libraries");
// sap
if (PluginChecker.isSAPWizardPluginLoaded()) {
coreService.synchronizeSapLib();
}
coreService.resetUniservLibraries();
TimeMeasure.step("logOnProject", "sync specific libraries");
// remove the auto-build to enhance the build speed and application's use
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceDescription description = workspace.getDescription();
description.setAutoBuilding(false);
try {
workspace.setDescription(description);
} catch (CoreException e) {
// do nothing
}
coreService.createStatsLogAndImplicitParamter(project);
coreService.synchronizeMapptingXML();
try {
// collect
TokenCollectorFactory.getFactory().priorCollect();
} catch (Exception e) {
throw new PersistenceException(e);
}
fullLogonFinished = true;
} finally {
TimeMeasure.end("logOnProject");
TimeMeasure.display = false;
TimeMeasure.displaySteps = false;
TimeMeasure.measureActive = false;
}
String str[] = new String[] { getRepositoryContext().getUser() + "", projectManager.getCurrentProject() + "" }; //$NON-NLS-1$ //$NON-NLS-2$
log.info(Messages.getString("ProxyRepositoryFactory.log.loggedOn", str)); //$NON-NLS-1$
} catch (LoginException e) {
logOffProject();
throw e;
} catch (PersistenceException e) {
logOffProject();
throw e;
} catch (RuntimeException e) {
logOffProject();
throw e;
}
}
public void logOffProject() {
// getRepositoryContext().setProject(null);
repositoryFactoryFromProvider.logOffProject();
fullLogonFinished = false;
}
public boolean setAuthorByLogin(Item item, String login) throws PersistenceException {
return repositoryFactoryFromProvider.setAuthorByLogin(item, login);
}
@Override
public Property getUptodateProperty(Project project, Property property) throws PersistenceException {
return repositoryFactoryFromProvider.getUptodateProperty(project, property);
}
@Override
public Property getUptodateProperty(Property property) throws PersistenceException {
return getUptodateProperty(projectManager.getCurrentProject(), property);
}
@Override
public RootContainer<String, IRepositoryViewObject> getMetadata(Project project, ERepositoryObjectType type,
boolean... options) throws PersistenceException {
return this.repositoryFactoryFromProvider.getMetadata(project, type, options);
}
@Override
public RootContainer<String, IRepositoryViewObject> getMetadata(ERepositoryObjectType type) throws PersistenceException {
return getMetadata(projectManager.getCurrentProject(), type);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#getRecycleBinItems(org.talend.core.model.general.Project)
*/
@Override
public List<IRepositoryViewObject> getRecycleBinItems(Project project, boolean... options) throws PersistenceException {
return this.repositoryFactoryFromProvider.getRecycleBinItems(project, options);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#getSpecificVersion(org.talend.core.model.general.Project,
* java.lang.String, java.lang.String)
*/
@Override
public IRepositoryViewObject getSpecificVersion(Project project, String id, String version, boolean avoidSaveProject)
throws PersistenceException {
List<IRepositoryViewObject> objList = getAllVersion(project, id, avoidSaveProject);
for (IRepositoryViewObject obj : objList) {
if (obj.getVersion().equals(version)) {
return obj;
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#getSpecificVersion(java.lang.String, java.lang.String)
*/
@Override
public IRepositoryViewObject getSpecificVersion(String id, String version, boolean avoidSaveProject)
throws PersistenceException {
return getSpecificVersion(projectManager.getCurrentProject(), id, version, avoidSaveProject);
}
public void checkAvailability() throws PersistenceException {
this.repositoryFactoryFromProvider.checkAvailability();
}
@Override
@SuppressWarnings("unchecked")
public void executeRepositoryWorkUnit(RepositoryWorkUnit workUnit) {
this.repositoryFactoryFromProvider.executeRepositoryWorkUnit(workUnit);
}
public void unloadResources(Property property) throws PersistenceException {
repositoryFactoryFromProvider.unloadResources(property);
}
/**
*
* DOC mzhao Comment method "unloadResources".
*
* @param uriString
* @throws PersistenceException
*/
public void unloadResources(String uriString) throws PersistenceException {
repositoryFactoryFromProvider.unloadResources(uriString);
}
public void unloadResources() throws PersistenceException {
repositoryFactoryFromProvider.unloadResources();
}
@Override
public FolderItem getFolderItem(Project project, ERepositoryObjectType itemType, IPath path) {
return repositoryFactoryFromProvider.getFolderItem(project, itemType, path);
}
/**
* Getter for fullLogonFinished.
*
* @return the fullLogonFinished
*/
public boolean isFullLogonFinished() {
return this.fullLogonFinished;
}
/**
* Sets the fullLogonFinished.
*
* @param fullLogonFinished the fullLogonFinished to set
*/
public void setFullLogonFinished(boolean fullLogonFinished) {
this.fullLogonFinished = fullLogonFinished;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#addRepositoryWorkUnitListener(org.talend.core.model.repository
* .IRepositoryWorkUnitListener)
*/
@Override
public void addRepositoryWorkUnitListener(IRepositoryWorkUnitListener listener) {
repositoryFactoryFromProvider.addRepositoryWorkUnitListener(listener);
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#enableSandboxProject()
*/
@Override
public boolean enableSandboxProject() throws PersistenceException {
return repositoryFactoryFromProvider.enableSandboxProject();
}
/*
* (non-Javadoc)
*
* @see org.talend.repository.model.IProxyRepositoryFactory#isLocalConnectionProvider()
*/
@Override
public boolean isLocalConnectionProvider() throws PersistenceException {
return repositoryFactoryFromProvider.isLocalConnectionProvider();
}
/*
* (non-Javadoc)
*
* @see
* org.talend.repository.model.IProxyRepositoryFactory#getMetadataByFolder(org.talend.core.model.general.Project,
* org.talend.core.model.repository.ERepositoryObjectType, org.eclipse.core.runtime.IPath)
*/
@Override
public List<IRepositoryViewObject> getMetadataByFolder(Project project, ERepositoryObjectType itemType, IPath path) {
return repositoryFactoryFromProvider.getMetadataByFolder(project, itemType, path);
}
/*
* (non-Javadoc)
*
* @seeorg.talend.repository.model.IProxyRepositoryFactory#getMetadataByFolder(org.talend.core.model.repository.
* ERepositoryObjectType, org.eclipse.core.runtime.IPath)
*/
@Override
public List<IRepositoryViewObject> getMetadataByFolder(ERepositoryObjectType itemType, IPath path) {
return repositoryFactoryFromProvider.getMetadataByFolder(projectManager.getCurrentProject(), itemType, path);
}
/**
* DOC xqliu Comment method "getTdqRepositoryViewObjects".
*
* @param itemType
* @param folderName
* @return
* @throws PersistenceException
*/
public RootContainer<String, IRepositoryViewObject> getTdqRepositoryViewObjects(ERepositoryObjectType itemType,
String folderName) throws PersistenceException {
return getTdqRepositoryViewObjects(projectManager.getCurrentProject(), itemType, folderName, true);
}
/**
* DOC xqliu Comment method "getTdqRepositoryViewObjects".
*
* @param project
* @param type
* @param folderName
* @param options
* @return
* @throws PersistenceException
*/
public RootContainer<String, IRepositoryViewObject> getTdqRepositoryViewObjects(Project project, ERepositoryObjectType type,
String folderName, boolean... options) throws PersistenceException {
return this.repositoryFactoryFromProvider.getTdqRepositoryViewObjects(project, type, folderName, options);
}
/**
* DOC bZhou Comment method "getProperty".
*
* @param element
* @return
*/
public Property getProperty(ModelElement element) {
Resource eResource = element.eResource();
if (eResource != null) {
URI uri = eResource.getURI();
if (uri.isPlatform()) {
URI propertyURI = uri.trimFileExtension().appendFileExtension(FileConstants.PROPERTIES_EXTENSION);
XmiResourceManager resourceManager = this.repositoryFactoryFromProvider.getResourceManager();
if (resourceManager != null && resourceManager.resourceSet != null) {
Resource propertyResource = resourceManager.resourceSet.getResource(propertyURI, true);
return (Property) EcoreUtil.getObjectByType(propertyResource.getContents(),
PropertiesPackage.eINSTANCE.getProperty());
}
}
}
return null;
}
@Override
public LockInfo getLockInfo(Item item) {
return repositoryFactoryFromProvider.getLockInfo(item);
}
@Override
public String getNavigatorViewDescription() {
return repositoryFactoryFromProvider.getNavigatorViewDescription();
}
@Override
public void updateLockStatus() throws PersistenceException {
this.repositoryFactoryFromProvider.updateLockStatus();
}
}