// ============================================================================
//
// 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 com.amalto.workbench.widgets.xmleditor.infoholder;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.models.infoextractor.IAllDataModelHolder;
import com.amalto.workbench.utils.JobInfo;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSMDMConfig;
import com.amalto.workbench.webservices.WSTransformerV2;
import com.amalto.workbench.widgets.xmleditor.util.WorkflowInfo;
public abstract class ExternalInfoHolder<T> {
public static final String INFOID_ALLPROCESSNAMES = "all process names";//$NON-NLS-1$
public static final String INFOID_ALLJOBINFOS = "all job infos";//$NON-NLS-1$
public static final String INFOID_MDMSERVERINFO = "mdm server info";//$NON-NLS-1$
public static final String INFOID_ALLWORKFLOWINFOS = "all work flow infos";//$NON-NLS-1$
public static final String INFOID_ALLDATAMODELHOLDER = "all data model holder";//$NON-NLS-1$
public static final String INFOID_ALLCALLJOBVARIABLES = "all calljob vars";//$NON-NLS-1$
public static final String INFOID_ALLMDMSERVERINFO = "all mdm server infos";//$NON-NLS-1$
private static final Map<String, ExternalInfoHolder<?>> cache = new HashMap<String, ExternalInfoHolder<?>>();
private static final String holderExtension = "org.talend.mdm.workbench.infoholder";
protected static Logger log = Logger.getLogger(ExternalInfoHolder.class);
private static ExternalInfoHolder<?> getHolderFromExtension(String type) {
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(holderExtension);
if (null == point) {
return null;
}
for (IExtension ext : point.getExtensions()) {
IConfigurationElement[] configurationElements = ext.getConfigurationElements();
for (IConfigurationElement ce : configurationElements) {
String id = ce.getAttribute("type"); //$NON-NLS-1$
if (type.equals(id)) {
try {
return (ExternalInfoHolder<?>) ce.createExecutableExtension("class");
} catch (CoreException e) {
log.error(e.getMessage());
}
}
}
}
return null;
}
public static ExternalInfoHolder<?> getEnternalInfoHolder(String type) {
ExternalInfoHolder<?> holder = cache.get(type);
if (null == holder) {
holder = getHolderFromExtension(type);
cache.put(type, holder);
}
return holder;
}
public static ExternalInfoHolder<String[]> getAllProcessesNamesHolder(TMDMService service) {
return new AllProcessesNamesHolder(service);
}
public static ExternalInfoHolder<JobInfo[]> getAllJobInfosHolder(TMDMService service) {
return new AllJobInfoHolder(service);
}
public static ExternalInfoHolder<WSMDMConfig> getAllMDMServerInfoHolder(TMDMService service) {
return new MDMServerInfoHolder(service);
}
public static ExternalInfoHolder<IAllDataModelHolder> getAllDataModelInfoHolderProxy(TreeObject treeNode) {
return new AllDataModelInfoHolderProxy(treeNode);
}
public static ExternalInfoHolder<WorkflowInfo[]> getAllWorkflowInfoHolder(TMDMService service) {
return null;
}
public static ExternalInfoHolder<String[]> getProcessAllCallJobVarsCandidatesHolder(WSTransformerV2 service) {
return new ProcessAllCallJobVariableCandidatesHolder(service);
}
public static ExternalInfoHolder<String[]> getTriggerAllCallJobVarsCandidatesHolder() {
return (ExternalInfoHolder<String[]>) getEnternalInfoHolder("callJobVariableCandidates");
}
public abstract T getExternalInfo();
public abstract String getId();
}