Search in sources :

Example 1 with Folder

use of com.centurylink.mdw.plugin.designer.model.Folder in project mdw-designer by CenturyLinkCloud.

the class Discoverer method getFullUrl.

public String getFullUrl(Folder folder) {
    String fullUrl = folder.getName();
    StringBuilder folderName;
    Folder parent;
    Folder lFolder = folder;
    while ((parent = lFolder.getParent()) != null) {
        if (parent.getName().endsWith("/"))
            folderName = new StringBuilder(parent.getName()).append(fullUrl);
        else
            folderName = new StringBuilder(parent.getName()).append("/").append(fullUrl);
        lFolder = parent;
        fullUrl = folderName.toString();
    }
    return fullUrl;
}
Also used : Folder(com.centurylink.mdw.plugin.designer.model.Folder)

Example 2 with Folder

use of com.centurylink.mdw.plugin.designer.model.Folder in project mdw-designer by CenturyLinkCloud.

the class Discoverer method removeEmptyFolders.

private void removeEmptyFolders(Folder folder) {
    List<Folder> emptyFolders = new ArrayList<>();
    for (WorkflowElement child : folder.getChildren()) {
        if (child instanceof Folder) {
            Folder childFolder = ((Folder) child);
            if (childFolder.getChildren() == null)
                emptyFolders.add(childFolder);
        }
    }
    for (Folder emptyFolder : emptyFolders) {
        if (emptyFolder.getParent() instanceof Folder) {
            Folder parent = emptyFolder.getParent();
            parent.getChildren().remove(emptyFolder);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) Folder(com.centurylink.mdw.plugin.designer.model.Folder) WorkflowElement(com.centurylink.mdw.plugin.designer.model.WorkflowElement)

Example 3 with Folder

use of com.centurylink.mdw.plugin.designer.model.Folder in project mdw-designer by CenturyLinkCloud.

the class Discoverer method crawlForPackageFiles.

/**
 * Crawls to find any package XML or JSON files.
 */
private void crawlForPackageFiles(Folder parent) throws DiscoveryException, IOException, InterruptedException {
    if (progressMonitor.isCanceled())
        throw new InterruptedException();
    String parentUrl = getFullUrl(parent);
    if (httpHelper == null)
        httpHelper = new HttpHelper(new URL(parentUrl));
    httpHelper.setConnectTimeout(MdwPlugin.getSettings().getHttpConnectTimeout());
    httpHelper.setReadTimeout(MdwPlugin.getSettings().getHttpReadTimeout());
    if (// topLevel
    !parent.hasParent())
        httpHelper.setFollowHtmlHeadMetaRefresh(true);
    String content = httpHelper.get();
    if (content.startsWith("{")) {
        parseJsonPacakges(parent, content);
    } else {
        if (content.startsWith("<!"))
            content = content.substring(content.indexOf('\n') + 1);
        if (content.contains("&nbsp;"))
            content = content.replaceAll("&nbsp;", "").replace("<HR size=\"1\" noshade=\"noshade\">", "");
        if (!parent.hasParent() && httpHelper.getRedirect() != null)
            parent.setName(httpHelper.getRedirect().toString());
        try {
            List<String> links = parseDirectoryResponse(content);
            if (!parent.hasParent())
                topLevelFolders = links.size();
            if (latestVersionsOnly) {
                List<String> latestLinks = new ArrayList<>();
                String latestDir = null;
                for (String link : links) {
                    if (// snapshots excluded from
                    !link.startsWith("6") && !link.endsWith("-SNAPSHOT/")) // "latest only"
                    {
                        if (link.matches("[0-9.]*/")) {
                            if ((latestDir == null || latestDir.compareTo(link) < 0))
                                latestDir = link;
                        } else {
                            latestLinks.add(link);
                        }
                    }
                }
                if (latestDir != null)
                    latestLinks.add(latestDir);
                links = latestLinks;
            }
            for (String link : links) {
                if (!link.startsWith("6") && link.endsWith("/") && (MdwPlugin.getSettings().isIncludePreviewBuilds() || !link.endsWith("-SNAPSHOT/"))) {
                    // directory
                    if (!parent.hasParent())
                        progressMonitor.subTask("Scanning " + link);
                    Folder child = new Folder(link.substring(0, link.length() - 1));
                    if (link.matches("[0-9.]*/"))
                        parent.addChild(0, child);
                    else
                        parent.addChild(child);
                    httpHelper = null;
                    crawlForPackageFiles(child);
                    if (// topLevel
                    !parent.hasParent())
                        progressMonitor.worked(80 / topLevelFolders);
                } else if (link.endsWith(".xml") || link.endsWith(".json")) {
                    // XML or JSON file
                    File child = new File(parent, link);
                    parent.addChild(0, child);
                    child.setUrl(new URL(getFullUrl(child)));
                }
            }
        } catch (InterruptedException iex) {
            throw iex;
        } catch (Exception ex) {
            throw new DiscoveryException("Error crawling: " + parentUrl, ex);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) Folder(com.centurylink.mdw.plugin.designer.model.Folder) HttpHelper(com.centurylink.mdw.common.utilities.HttpHelper) File(com.centurylink.mdw.plugin.designer.model.File) URL(java.net.URL) IOException(java.io.IOException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) SAXException(org.xml.sax.SAXException)

Example 4 with Folder

use of com.centurylink.mdw.plugin.designer.model.Folder in project mdw-designer by CenturyLinkCloud.

the class ProcessExplorerContentProvider method getChildren.

public Object[] getChildren(Object parentElement) {
    if (parentElement instanceof WorkflowProject) {
        final WorkflowProject workflowProject = (WorkflowProject) parentElement;
        if (!workflowProject.isLoaded()) {
            try {
                IRunnableWithProgress loader = new IRunnableWithProgress() {

                    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                        ProgressMonitor progressMonitor = new SwtProgressMonitor(monitor);
                        progressMonitor.start("Loading " + workflowProject.getLabel());
                        progressMonitor.progress(5);
                        try {
                            workflowProject.initialize(progressMonitor);
                            if (workflowProject.getDataAccess() != null) {
                                workflowProject.getTopLevelUserVisiblePackages(progressMonitor);
                                workflowProject.getArchivedUserVisiblePackagesFolder(progressMonitor);
                                progressMonitor.done();
                            }
                        } catch (Exception ex) {
                            throw new InvocationTargetException(ex);
                        }
                    }
                };
                ProgressMonitorDialog progMonDlg = new MdwProgressMonitorDialog(MdwPlugin.getShell());
                progMonDlg.run(true, false, loader);
            } catch (InvocationTargetException itx) {
                if (itx.getCause() instanceof DataUnavailableException) {
                    PluginMessages.log(itx);
                    MessageDialog.openWarning(MdwPlugin.getShell(), LOAD_WF_PROJECT, itx.getCause().getMessage());
                } else if (itx.getCause() instanceof DataAccessOfflineException) {
                    PluginMessages.log(itx);
                    MessageDialog.openError(MdwPlugin.getShell(), LOAD_WF_PROJECT, itx.getCause().getMessage());
                    return new WorkflowPackage[0];
                } else {
                    PluginMessages.uiError(itx, LOAD_WF_PROJECT, workflowProject);
                    return new WorkflowPackage[0];
                }
            } catch (Exception ex) {
                PluginMessages.uiError(ex, LOAD_WF_PROJECT, workflowProject);
                return new WorkflowPackage[0];
            }
        }
        if (workflowProject.getDataAccess() == null)
            return new WorkflowPackage[0];
        List<WorkflowPackage> topLevelPackages = workflowProject.getTopLevelUserVisiblePackages();
        Folder archivedPackageFolder = workflowProject.getArchivedUserVisiblePackagesFolder();
        int size = topLevelPackages.size();
        boolean showArchived = isShowArchivedItems(workflowProject);
        if (showArchived)
            size++;
        AutomatedTestSuite testSuite = workflowProject.getLegacyTestSuite();
        if (testSuite != null && !testSuite.isEmpty())
            size++;
        Object[] objects = new Object[size];
        for (int i = 0; i < topLevelPackages.size(); i++) objects[i] = topLevelPackages.get(i);
        int cur = topLevelPackages.size();
        if (showArchived) {
            objects[cur] = archivedPackageFolder;
            cur++;
        }
        if (testSuite != null && !testSuite.isEmpty())
            objects[cur] = testSuite;
        return objects;
    } else if (parentElement instanceof WorkflowPackage) {
        WorkflowPackage packageVersion = (WorkflowPackage) parentElement;
        if (packageVersion.isArchived() && packageVersion.hasDescendantPackageVersions()) {
            return packageVersion.getDescendantPackageVersions().toArray(new WorkflowPackage[0]);
        } else {
            List<WorkflowElement> elements = new ArrayList<>();
            IPreferenceStore prefsStore = MdwPlugin.getDefault().getPreferenceStore();
            if (!prefsStore.getBoolean(PreferenceConstants.PREFS_FILTER_PROCESSES_IN_PEX))
                elements.addAll(packageVersion.getProcesses());
            if (!prefsStore.getBoolean(PreferenceConstants.PREFS_FILTER_WORKFLOW_ASSETS_IN_PEX))
                elements.addAll(packageVersion.getAssets());
            if (!prefsStore.getBoolean(PreferenceConstants.PREFS_FILTER_EVENT_HANDLERS_IN_PEX))
                elements.addAll(packageVersion.getExternalEvents());
            if (prefsStore.getBoolean(PreferenceConstants.PREFS_SHOW_ACTIVITY_IMPLEMENTORS_IN_PEX))
                elements.addAll(packageVersion.getActivityImpls());
            if (!prefsStore.getBoolean(PreferenceConstants.PREFS_FILTER_TASK_TEMPLATES_IN_PEX))
                elements.addAll(packageVersion.getTaskTemplates());
            elements.addAll(packageVersion.getChildFolders());
            if (isSortPackageContentsAtoZ()) {
                Collections.sort(elements, new Comparator<WorkflowElement>() {

                    public int compare(WorkflowElement e1, WorkflowElement e2) {
                        return e1.getLabel().compareToIgnoreCase(e2.getLabel());
                    }
                });
            }
            return elements.toArray(new Object[0]);
        }
    } else if (parentElement instanceof WorkflowProcess) {
        WorkflowProcess processVersion = (WorkflowProcess) parentElement;
        if (processVersion.hasDescendantProcessVersions()) {
            return processVersion.getDescendantProcessVersions().toArray(new WorkflowProcess[0]);
        } else {
            return emptyARRAY;
        }
    } else if (parentElement instanceof Folder) {
        Folder folder = (Folder) parentElement;
        return folder.getChildren().toArray(new WorkflowElement[0]);
    } else if (parentElement instanceof AutomatedTestSuite) {
        AutomatedTestSuite testSuite = (AutomatedTestSuite) parentElement;
        return testSuite.getTestCases().toArray(new AutomatedTestCase[0]);
    } else if (parentElement instanceof AutomatedTestCase) {
        AutomatedTestCase testCase = (AutomatedTestCase) parentElement;
        if (!testCase.isLegacy())
            return emptyARRAY;
        List<LegacyExpectedResults> expectedResults = testCase.getLegacyExpectedResults();
        List<File> files = testCase.getFiles();
        Object[] objects = new Object[expectedResults.size() + files.size()];
        for (int i = 0; i < expectedResults.size(); i++) objects[i] = expectedResults.get(i);
        for (int i = expectedResults.size(); i < objects.length; i++) objects[i] = files.get(i - expectedResults.size());
        return objects;
    } else {
        return emptyARRAY;
    }
}
Also used : WorkflowPackage(com.centurylink.mdw.plugin.designer.model.WorkflowPackage) SwtProgressMonitor(com.centurylink.mdw.plugin.designer.SwtProgressMonitor) MdwProgressMonitorDialog(com.centurylink.mdw.plugin.designer.dialogs.MdwProgressMonitorDialog) Folder(com.centurylink.mdw.plugin.designer.model.Folder) AutomatedTestSuite(com.centurylink.mdw.plugin.designer.model.AutomatedTestSuite) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) Comparator(java.util.Comparator) ArrayList(java.util.ArrayList) List(java.util.List) AutomatedTestCase(com.centurylink.mdw.plugin.designer.model.AutomatedTestCase) WorkflowProcess(com.centurylink.mdw.plugin.designer.model.WorkflowProcess) DataAccessOfflineException(com.centurylink.mdw.dataaccess.DataAccessOfflineException) MdwProgressMonitorDialog(com.centurylink.mdw.plugin.designer.dialogs.MdwProgressMonitorDialog) ProgressMonitorDialog(org.eclipse.jface.dialogs.ProgressMonitorDialog) WorkflowProject(com.centurylink.mdw.plugin.project.model.WorkflowProject) DataAccessOfflineException(com.centurylink.mdw.dataaccess.DataAccessOfflineException) InvocationTargetException(java.lang.reflect.InvocationTargetException) DataUnavailableException(com.centurylink.mdw.designer.DataUnavailableException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ProgressMonitor(com.centurylink.mdw.common.utilities.timer.ProgressMonitor) SwtProgressMonitor(com.centurylink.mdw.plugin.designer.SwtProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) DataUnavailableException(com.centurylink.mdw.designer.DataUnavailableException) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkflowElement(com.centurylink.mdw.plugin.designer.model.WorkflowElement)

Example 5 with Folder

use of com.centurylink.mdw.plugin.designer.model.Folder in project mdw-designer by CenturyLinkCloud.

the class WorkflowProject method findArchivedPackages.

/**
 * Returns all top-level archived (non-latest) packages, populated with
 * their descendants which include the appropriate process versions. Uses
 * 10% of progressMonitor.
 */
private Folder findArchivedPackages(ProgressMonitor progressMonitor, boolean visiblePkgsOnly) {
    CodeTimer timer = new CodeTimer("findAuthorizedArchivedPackages()");
    if (progressMonitor != null)
        progressMonitor.subTask("Organizing packages");
    Folder archivedPkgFolder = new Folder("Archive", this);
    archivedPkgFolder.setIcon("archive.gif");
    List<WorkflowPackage> topLevelArchivedPackageList = new ArrayList<>();
    List<WorkflowPackage> allArchivedPackages = new ArrayList<>();
    for (PackageVO packageVO : getDataAccess().getPackages(false)) {
        if (isShowDefaultPackage() || !packageVO.isDefaultPackage()) {
            WorkflowPackage potentialArchived = new WorkflowPackage(this, packageVO);
            if (!getTopLevelPackages().contains(potentialArchived)) {
                potentialArchived.setArchived(true);
                potentialArchived.setProcesses(findProcesses(potentialArchived));
                potentialArchived.setAssets(findWorkflowAssets(potentialArchived));
                potentialArchived.setActivityImpls(findActivityImplementors(potentialArchived));
                potentialArchived.setExternalEvents(findExternalEvents(potentialArchived));
                potentialArchived.setTaskTemplates(findTaskTemplates(potentialArchived));
                allArchivedPackages.add(potentialArchived);
            }
        }
    }
    // organize the package version hierarchy
    Map<String, WorkflowPackage> topLevelArchivedPackages = new HashMap<>();
    for (WorkflowPackage archivedPackage : allArchivedPackages) {
        WorkflowPackage topLevel = topLevelArchivedPackages.get(archivedPackage.getName());
        if ((!visiblePkgsOnly || (visiblePkgsOnly && archivedPackage.isVisible())) && (topLevel == null || archivedPackage.getPackageVO().getVersion() > topLevel.getPackageVO().getVersion()))
            topLevelArchivedPackages.put(archivedPackage.getName(), archivedPackage);
    }
    for (WorkflowPackage topLevelArchivedPackage : topLevelArchivedPackages.values()) {
        for (WorkflowPackage archivedPackage : allArchivedPackages) {
            if (topLevelArchivedPackage.getName().equals(archivedPackage.getName()) && (!visiblePkgsOnly || (visiblePkgsOnly && archivedPackage.isVisible()))) {
                if (topLevelArchivedPackage.equals(archivedPackage)) {
                    // clone top-level process for first child
                    WorkflowPackage firstChild = new WorkflowPackage(topLevelArchivedPackage);
                    firstChild.setArchived(true);
                    firstChild.setTopLevelVersion(topLevelArchivedPackage);
                    firstChild.setProcesses(topLevelArchivedPackage.getProcesses());
                    firstChild.setAssets(topLevelArchivedPackage.getAssets());
                    firstChild.setActivityImpls(topLevelArchivedPackage.getActivityImpls());
                    firstChild.setExternalEvents(topLevelArchivedPackage.getExternalEvents());
                    firstChild.setTaskTemplates(topLevelArchivedPackage.getTaskTemplates());
                    topLevelArchivedPackage.addDescendantPackageVersion(firstChild);
                } else {
                    archivedPackage.setTopLevelVersion(topLevelArchivedPackage);
                    topLevelArchivedPackage.addDescendantPackageVersion(archivedPackage);
                }
            }
        }
        topLevelArchivedPackageList.add(topLevelArchivedPackage);
        topLevelArchivedPackage.setArchivedFolder(archivedPkgFolder);
    }
    Collections.sort(topLevelArchivedPackageList);
    if (isShowDefaultPackage()) {
        // add unpackaged (default package)
        PackageVO defaultPackageVO = new PackageVO();
        defaultPackageVO.setPackageId(Long.valueOf(0));
        defaultPackageVO.setPackageName(PackageVO.DEFAULT_PACKAGE_NAME);
        archivedDefaultPackage = new WorkflowPackage(this, defaultPackageVO);
        archivedDefaultPackage.setProcesses(findUnpackagedProcesses());
        archivedDefaultPackage.setChildFolders(findUnpackagedAssetFolders());
        archivedDefaultPackage.setArchived(true);
        topLevelArchivedPackageList.add(0, archivedDefaultPackage);
    }
    List<WorkflowElement> children = new ArrayList<>();
    children.addAll(topLevelArchivedPackageList);
    archivedPkgFolder.setChildren(children);
    if (progressMonitor != null)
        progressMonitor.progress(10);
    timer.stopAndLog();
    return archivedPkgFolder;
}
Also used : WorkflowPackage(com.centurylink.mdw.plugin.designer.model.WorkflowPackage) PackageVO(com.centurylink.mdw.model.value.process.PackageVO) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Folder(com.centurylink.mdw.plugin.designer.model.Folder) IVirtualFolder(org.eclipse.wst.common.componentcore.resources.IVirtualFolder) IFolder(org.eclipse.core.resources.IFolder) CodeTimer(com.centurylink.mdw.plugin.CodeTimer) WorkflowElement(com.centurylink.mdw.plugin.designer.model.WorkflowElement)

Aggregations

Folder (com.centurylink.mdw.plugin.designer.model.Folder)14 ArrayList (java.util.ArrayList)8 WorkflowElement (com.centurylink.mdw.plugin.designer.model.WorkflowElement)7 WorkflowPackage (com.centurylink.mdw.plugin.designer.model.WorkflowPackage)7 File (com.centurylink.mdw.plugin.designer.model.File)6 CodeTimer (com.centurylink.mdw.plugin.CodeTimer)3 AutomatedTestCase (com.centurylink.mdw.plugin.designer.model.AutomatedTestCase)3 AutomatedTestSuite (com.centurylink.mdw.plugin.designer.model.AutomatedTestSuite)3 HashMap (java.util.HashMap)3 List (java.util.List)3 PackageVO (com.centurylink.mdw.model.value.process.PackageVO)2 LegacyExpectedResults (com.centurylink.mdw.plugin.designer.model.LegacyExpectedResults)2 WorkflowProject (com.centurylink.mdw.plugin.project.model.WorkflowProject)2 URL (java.net.URL)2 IFolder (org.eclipse.core.resources.IFolder)2 IVirtualFolder (org.eclipse.wst.common.componentcore.resources.IVirtualFolder)2 MDWProcessDefinition (com.centurylink.mdw.bpm.MDWProcessDefinition)1 PackageDocument (com.centurylink.mdw.bpm.PackageDocument)1 Discover (com.centurylink.mdw.cli.Discover)1 HttpHelper (com.centurylink.mdw.common.utilities.HttpHelper)1