// ============================================================================ // // 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.dataprofiler.ecos.jobs; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.talend.dataprofiler.ecos.model.IEcosCategory; import org.talend.dataprofiler.ecos.model.IEcosComponent; import org.talend.dataprofiler.ecos.model.IRevision; import org.talend.dataprofiler.ecos.model.RevisionInfo; import org.talend.dataprofiler.ecos.model.impl.EcosComponent; import org.talend.dataprofiler.ecos.model.impl.Revision; import org.talend.dataprofiler.ecos.service.EcosystemService; /** * Search for component extensions. */ public class ComponentSearcher { protected static Logger log = Logger.getLogger(ComponentSearcher.class); private static final String RELEASE_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; //$NON-NLS-1$ private static DateFormat formatter = new SimpleDateFormat(RELEASE_DATE_FORMAT); private static List<IEcosCategory> ecosCategories; /** * get Available Category. * * @param version * @return empty list if no any category. * @throws Exception */ @Deprecated public static List<IEcosCategory> getAvailableCategory(String version) throws Exception { if (ecosCategories == null) { ecosCategories = EcosystemService.getCategoryList(version); } return ecosCategories; } /** * get Available Category depend on isOnFilter. * * @param version * @return empty list if no any category. * @throws Exception */ public static List<IEcosCategory> getAvailableCategory(String version, boolean isOnFilter) throws Exception { // when on filter, get ecosCategories from cache. if (ecosCategories == null && !isOnFilter) { ecosCategories = EcosystemService.getCategoryList(version); } return ecosCategories; } /** * Find available components. * * @param version The tos version. * @param language The project language. * @return */ public static List<IEcosComponent> getAvailableComponentExtensions(String version, IEcosCategory categry) { return getAvailableComponentExtensions(version, categry, false); } /** * get Available Component Extensions depend on isOnFilter. * * @param version * @param categry * @param isOnFilter * @return */ public static List<IEcosComponent> getAvailableComponentExtensions(String version, IEcosCategory categry, boolean isOnFilter) { List<IEcosComponent> extensions = new ArrayList<IEcosComponent>(); // when on filter, do not get component from internet if (isOnFilter) { return extensions; } try { List<RevisionInfo> revisions = EcosystemService.getRevisionList(categry.getId(), version); Map<String, IEcosComponent> extensionsMap = new HashMap<String, IEcosComponent>(); for (RevisionInfo revision : revisions) { IEcosComponent extension = extensionsMap.get(revision.getExtenson_name()); if (extension == null) { extension = new EcosComponent(); extension.setName(revision.getExtenson_name()); extension.setAuthor(revision.getAuthor_name()); extension.setCategry(categry); extension.setDescription(revision.getExtension_description()); extensionsMap.put(extension.getName(), extension); extensions.add(extension); } IRevision rev = convertRevision(revision); extension.getRevisions().add(rev); if (extension.getLatestRevision() == null || extension.getLatestRevision().getDate().before(rev.getDate())) { // assumes that the revision with latest release date is the newest one. extension.setLatestRevision(rev); } } } catch (Exception e) { log.error(e, e); } return extensions; } /** * Convert the web service returned value to our model object. * * @param revision The message returned from web service method call. * @return * @throws ParseException */ private static IRevision convertRevision(RevisionInfo revision) throws ParseException { IRevision rev = new Revision(); rev.setDate(formatter.parse(revision.getRevision_date())); rev.setName(revision.getRevision_name()); rev.setUrl(revision.getDownload_url()); rev.setDescription(revision.getRevision_description()); rev.setId(revision.getRevision_id()); rev.setFileName(revision.getFilename()); return rev; } /** * Find the components that have been installed. * * @param components * @return */ public static List<IEcosComponent> getInstalledExtensions(List<IEcosComponent> components) { List<IEcosComponent> installed = new ArrayList<IEcosComponent>(); for (IEcosComponent component : components) { if (component.getInstalledLocation() != null) { installed.add(component); } } return installed; } }