// ============================================================================ // // 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.util.ArrayList; import java.util.List; import org.eclipse.emf.ecore.util.EcoreUtil; import org.talend.commons.exception.BusinessException; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.utils.data.container.RootContainer; 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.ConnectionItem; import org.talend.core.model.properties.ContextItem; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.IRepositoryWorkUnitListener; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.repository.RepositoryWorkUnit; import org.talend.repository.model.ERepositoryStatus; /** * DOC smallet class global comment. Detailled comment <br/> * * $Id$ * */ public abstract class AbstractRepositoryFactory implements IRepositoryFactory { private String name; private String id; private boolean displayToUser; private boolean authenticationNeeded; private List<DynamicFieldBean> fields = new ArrayList<DynamicFieldBean>(); private List<DynamicButtonBean> buttons = new ArrayList<DynamicButtonBean>(); private List<DynamicChoiceBean> choices = new ArrayList<DynamicChoiceBean>(); private boolean loggedOnProject = false; private List<IRepositoryWorkUnitListener> listeners = new ArrayList<IRepositoryWorkUnitListener>(); public List<DynamicButtonBean> getButtons() { return buttons; } public List<DynamicChoiceBean> getChoices() { return choices; } /** * Getter for authenticationNeeded. * * @return the authenticationNeeded */ public boolean isAuthenticationNeeded() { return this.authenticationNeeded; } /** * Sets the authenticationNeeded. * * @param authenticationNeeded the authenticationNeeded to set */ public void setAuthenticationNeeded(boolean authenticationNeeded) { this.authenticationNeeded = authenticationNeeded; } /** * Getter for name. * * @return the name */ public String getName() { return this.name; } /** * Sets the name. * * @param name the name to set */ public void setName(String name) { this.name = name; } public String getId() { return this.id; } public void setId(String id) { this.id = id; } public List<DynamicFieldBean> getFields() { return this.fields; } public void setFields(List<DynamicFieldBean> fields) { this.fields = fields; } public RepositoryContext getRepositoryContext() { Context ctx = CoreRuntimePlugin.getInstance().getContext(); return (RepositoryContext) ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY); } @Override public String toString() { return getName(); } /** * Generates the next id for serializable. If no serializable returns 0. * * @param project the project to scan * * @return the next id for the project * @throws PersistenceException * @throws PersistenceException if processes cannot be retrieved */ public String getNextId() { return EcoreUtil.generateUUID(); } private void collect(RootContainer<String, IRepositoryViewObject> rootContainer, List<ConnectionItem> result) throws PersistenceException { for (IRepositoryViewObject repositoryObject : rootContainer.getAbsoluteMembers().objects()) { ConnectionItem connectionItem = (ConnectionItem) repositoryObject.getProperty().getItem(); if (getStatus(connectionItem) != ERepositoryStatus.DELETED) { result.add(connectionItem); } } } // gather all the metadata connections (file / db / etc ...) public List<ConnectionItem> getMetadataConnectionsItem(Project project) throws PersistenceException { List<ConnectionItem> result = new ArrayList<ConnectionItem>(); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_DELIMITED), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_POSITIONAL), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_REGEXP), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_XML), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_EXCEL), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_FILE_LDIF), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_CONNECTIONS), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_SAPCONNECTIONS), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_HEADER_FOOTER), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_LDAP_SCHEMA), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_GENERIC_SCHEMA), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_WSDL_SCHEMA), result); collect(getMetadata(project, ERepositoryObjectType.METADATA_SALESFORCE_SCHEMA), result); return result; } // gather all the contexts public List<ContextItem> getContextItem(Project project) throws PersistenceException { List<ContextItem> result = new ArrayList<ContextItem>(); for (IRepositoryViewObject repositoryObject : getMetadata(project, ERepositoryObjectType.CONTEXT).getAbsoluteMembers() .objects()) { ContextItem contextItem = (ContextItem) repositoryObject.getProperty().getItem(); if (getStatus(contextItem) != ERepositoryStatus.DELETED) { result.add(contextItem); } } return result; } public boolean isDisplayToUser() { return displayToUser; } public void setDisplayToUser(boolean displayToUser) { this.displayToUser = displayToUser; } public void beforeLogon(Project project) throws PersistenceException, LoginException { // do nothing by default } public void beforeLogon(Project project, long revisonNum) throws PersistenceException, LoginException { // do nothing by default } public boolean isUserReadOnlyOnCurrentProject() { return false; } public void checkAvailability() { // is available by default } @SuppressWarnings("unchecked") public void executeRepositoryWorkUnit(RepositoryWorkUnit workUnit) { workUnit.executeRun(); } public void logOffProject() { loggedOnProject = false; listeners.clear(); } public boolean isLoggedOnProject() { return loggedOnProject; } public void setLoggedOnProject(boolean loggedOnProject) { this.loggedOnProject = loggedOnProject; } /* * (non-Javadoc) * * @seeorg.talend.repository.model.IRepositoryFactory#addRepositoryWorkUnitListener(org.talend.repository.model. * IRepositoryWorkUnitListener) */ public void addRepositoryWorkUnitListener(IRepositoryWorkUnitListener listener) { synchronized (lock) { listeners.add(listener); } } public void runRepositoryWorkUnitListeners() { List<IRepositoryWorkUnitListener> list = new ArrayList<IRepositoryWorkUnitListener>(); synchronized (lock) { list.addAll(listeners); } for (IRepositoryWorkUnitListener listener : list) { listener.workUnitFinished(); } synchronized (lock) { listeners.removeAll(list); } } private Object lock = new Object(); /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryFactory#readProject(boolean) */ public Project[] readProject(boolean unloadResource) throws PersistenceException, BusinessException { return readProject(); } @Override public void updateLockStatus() throws PersistenceException { // nothing to do, by default } }