// ============================================================================ // // Copyright (C) 2006-2016 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.dq.helper; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.apache.log4j.Logger; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.runtime.model.repository.ERepositoryStatus; import org.talend.core.GlobalServiceRegister; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.general.Project; import org.talend.core.model.properties.Item; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.core.ui.IReferencedProjectService; import org.talend.repository.ProjectManager; import org.talend.repository.RepositoryWorkUnit; /** * DOC qiongli class global comment. Detailled comment <br/> * * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $ * */ public class ProxyRepositoryManager { private static ProxyRepositoryManager instance = new ProxyRepositoryManager(); private static Logger log = Logger.getLogger(ProxyRepositoryManager.class); public static ProxyRepositoryManager getInstance() { return instance; } /** * * DOC qiongli:just update/commit . */ public void save() { if (!isReadOnly()) { RepositoryWorkUnit<Object> workUnit = new RepositoryWorkUnit<Object>("save TDQ Project") {//$NON-NLS-1$ @Override protected void run() { } }; workUnit.setAvoidUnloadResources(true); ProxyRepositoryFactory.getInstance().executeRepositoryWorkUnit(workUnit); } } /** * * DOC qiongli Comment method "refresh". */ public void refresh() { try { ProxyRepositoryFactory.getInstance().initialize(); } catch (PersistenceException e) { log.error(e, e); } } /** * * DOC qiongli Comment method "lock". * * @param item */ public void lock(final Item item) { if (!isReadOnly() && item != null) { if (!item.eIsProxy()) { try { ProxyRepositoryFactory.getInstance().lock(item); } catch (PersistenceException e) { log.error(e, e); } catch (LoginException e) { log.error(e, e); } } } } /** * * DOC qiongli Comment method "unLock". * * @param item */ public void unLock(final Item item) { if (!isReadOnly() & item != null) { try { ProxyRepositoryFactory.getInstance().unlock(item); } catch (PersistenceException e) { log.error(e, e); } catch (LoginException e) { log.error(e, e); } } } public boolean isLocalProject() { RepositoryContext repositoryContext = (RepositoryContext) CoreRuntimePlugin.getInstance().getContext() .getProperty(Context.REPOSITORY_CONTEXT_KEY); Project project = repositoryContext.getProject(); if (project == null) { return true; } if (project.isLocal()) { return true; } return false; } public Boolean isEditable(Item item) { ERepositoryStatus status = ProxyRepositoryFactory.getInstance().getStatus(item); switch (status) { case LOCK_BY_OTHER: case DELETED: case NOT_UP_TO_DATE: case READ_ONLY: return false; default: return true; } } public Boolean isLocked(Item item) { ERepositoryStatus status = ProxyRepositoryFactory.getInstance().getStatus(item); switch (status) { case LOCK_BY_OTHER: case LOCK_BY_USER: return Boolean.TRUE; default: return Boolean.FALSE; } } public Boolean isReadOnly() { return ProxyRepositoryFactory.getInstance().isUserReadOnlyOnCurrentProject(); } public Boolean isLockByOthers(Item item) { ERepositoryStatus status = ProxyRepositoryFactory.getInstance().getStatus(item); switch (status) { case LOCK_BY_OTHER: return true; default: return false; } } public Boolean isLockByUserOwn(Item item) { ERepositoryStatus status = ProxyRepositoryFactory.getInstance().getStatus(item); switch (status) { case LOCK_BY_USER: return true; default: return false; } } public boolean isMergeRefProject() { if (org.talend.core.PluginChecker.isRefProjectLoaded()) { IReferencedProjectService service = (IReferencedProjectService) GlobalServiceRegister.getDefault().getService( IReferencedProjectService.class); if (service != null) { return service.isMergeRefProject(); } } return false; } public Set<org.talend.core.model.general.Project> getAllProjects() { // make sure there is no duplicate projects, and the main project is the first one. Set<Project> result = new LinkedHashSet<Project>(); Project currentProject = ProjectManager.getInstance().getCurrentProject(); List<Project> referencedProjects = ProjectManager.getInstance().getAllReferencedProjects(); for (Project pro : referencedProjects) { pro.setMainProject(false); } result.add(currentProject); result.addAll(referencedProjects); return result; } public Project getProjectFromProjectTechnicalLabel(String technicalLabel) { for (Project project : getAllProjects()) { if (project.getTechnicalLabel().equals(technicalLabel)) { return project; } } return null; } }