From 6d7a0bcf353fd7d24d15876c8b0510d25043bfb9 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Tue, 6 Oct 2020 23:00:33 +0200 Subject: [PATCH] droped module Issue #94 --- imixs-adapters-import/README.md | 59 --- imixs-adapters-import/doc/images/webui-01.png | Bin 41213 -> 0 bytes imixs-adapters-import/doc/images/webui-02.png | Bin 59575 -> 0 bytes imixs-adapters-import/pom.xml | 41 --- .../importer/DocumentImportController.java | 225 ------------ .../importer/DocumentImportEvent.java | 110 ------ .../importer/DocumentImportScheduler.java | 98 ----- .../importer/DocumentImportService.java | 143 -------- .../importer/adapter/EmailImportAdapter.java | 76 ---- .../importer/adapter/FTPImportAdapter.java | 243 ------------- .../src/main/resources/META-INF/beans.xml | 6 - .../src/main/resources/META-INF/copyright.txt | 24 -- .../src/main/resources/META-INF/licence.txt | 339 ----------------- .../webapp/pages/admin/document_import.xhtml | 342 ------------------ .../pages/admin/sub_scheduler_control.xhtml | 130 ------- pom.xml | 2 +- 16 files changed, 1 insertion(+), 1837 deletions(-) delete mode 100644 imixs-adapters-import/README.md delete mode 100644 imixs-adapters-import/doc/images/webui-01.png delete mode 100644 imixs-adapters-import/doc/images/webui-02.png delete mode 100644 imixs-adapters-import/pom.xml delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportController.java delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportEvent.java delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportScheduler.java delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportService.java delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/EmailImportAdapter.java delete mode 100644 imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/FTPImportAdapter.java delete mode 100644 imixs-adapters-import/src/main/resources/META-INF/beans.xml delete mode 100644 imixs-adapters-import/src/main/resources/META-INF/copyright.txt delete mode 100644 imixs-adapters-import/src/main/resources/META-INF/licence.txt delete mode 100644 imixs-adapters-import/src/main/webapp/pages/admin/document_import.xhtml delete mode 100644 imixs-adapters-import/src/main/webapp/pages/admin/sub_scheduler_control.xhtml diff --git a/imixs-adapters-import/README.md b/imixs-adapters-import/README.md deleted file mode 100644 index d2a99f4..0000000 --- a/imixs-adapters-import/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# Import Adapter - -The Imixs Import Adapter is a generic import adapter service to be used to import documents form various sources. An import scheduler sends CDI events to be processed by specific import observers. The following import sources are supported: - - - FTP - import form a ftp server - - IMAP - import form an email box via IMAP - - -# Scheduling - -The Imixs DocumentImportScheduler uses a calendar-based syntax for scheduling based on the EJB 3.1 Timer Service specification. The syntax takes its roots from the Unix cron utility. This is an example to run the scheduler all 15 minutes - - - minute=*/15 - hour=* - - -## The Source Objects - -Each source object provides at least the following properties to be used by a observer implementation: - - - server - server address including protocol - - port - optional server port - - user - optional user id to access the server - - password - - task - the task id a new workitem is assigned to - - event - the event id a new workitem is processed - - workflowgroup - the workflow group the new workitem should be assigend to - - modelversion - optional modelversion the new workitem is assigend to - - selector - an optional selector to specify the source (e.g. a path on a ftp server) - - - ### Options - - A source object can provide additional options provided in the item 'options'. The DocumentImportService provides a a convenient method to get a Properties object for all options: - - // get properties form source object - Properties properties = documentImportService.getOptionsProperties(ItemCollection source); - - - -## The Web UI - -The Importer adapter provides a JSF Web UI component to be used for jsf applications. This ui component is optional and can be implement in customized way. - - - -### The DocumentImportController - -The CDI Bean DocumentImportController is used to display and select data sources. The controller can be extend for individual source definitions. - - - - - - - - - diff --git a/imixs-adapters-import/doc/images/webui-01.png b/imixs-adapters-import/doc/images/webui-01.png deleted file mode 100644 index a5c82785f3f19463d2695dc9435d29ce7974e4ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41213 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 F`yaFg(h>jw diff --git a/imixs-adapters-import/doc/images/webui-02.png b/imixs-adapters-import/doc/images/webui-02.png deleted file mode 100644 index f13a23188fb840f24108c324729cdb03470f0a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59575 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 Hz8= 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 W?o*Z5%H9*7XlP(E`@Ceu@Bam_V$j6^ diff --git a/imixs-adapters-import/pom.xml b/imixs-adapters-import/pom.xml deleted file mode 100644 index acee5ba..0000000 --- a/imixs-adapters-import/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - 4.0.0 - - org.imixs.workflow - imixs-adapters - 2.2.3-SNAPSHOT - - imixs-adapters-import - Imixs-Workflow Import Adapter - A generic import adapter service - https://github.com/imixs/imixs-adapters - - - - - - javax - javaee-api - 7.0 - provided - - - - org.imixs.workflow - imixs-workflow-core - - - - org.imixs.workflow - imixs-workflow-engine - - - - - commons-net - commons-net - 3.6 - - - - \ No newline at end of file diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportController.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportController.java deleted file mode 100644 index aed9cba..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportController.java +++ /dev/null @@ -1,225 +0,0 @@ -/******************************************************************************* - * Imixs Workflow Technology - * Copyright (C) 2003, 2008 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Imixs Software Solutions GmbH - initial API and implementation - * Ralph Soika - * - *******************************************************************************/ -package org.imixs.workflow.importer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -import javax.annotation.PostConstruct; -import javax.ejb.EJB; -import javax.faces.view.ViewScoped; -import javax.inject.Named; - -import org.imixs.workflow.ItemCollection; -import org.imixs.workflow.engine.scheduler.SchedulerController; -import org.imixs.workflow.engine.scheduler.SchedulerService; - -/** - * The DocumentImportController is used to configure the import scheduler. - *

- * The configuration is based on the default scheduler - *

- * The configuration object holds a item named 'sources'. This item contains a - * list of options (Map). These source definitions are consumed by - * ImportObserver implementations. This is an generic extension for custom - * implementations. There are different import adapters already defined like - * EmailImportAdapter or the FTPImportAdatper to process a single import source. - *

- * Sources are organized in the item 'sources' in a ordered list of Map objects. - * Internally the map objects are converted into ItemCollection to simplify the - * handling in JSF forms. - *

- * Each source object has a internal index number (pos) to identify the source - * unique. The sources can be reordered by calling the method up() and down(). - * - * @see FTPImportAdapter, EmailImportAdapter - * @author rsoika - * @version 1.0 - */ - -@Named -@ViewScoped -public class DocumentImportController extends SchedulerController { - - private static final long serialVersionUID = 1L; - - protected List sources = null; - protected ItemCollection source = null;// selected source - - @EJB - SchedulerService schedulerService; - - @EJB - DocumentImportService documentImportService; - - private static Logger logger = Logger.getLogger(DocumentImportController.class.getName()); - - /** - * This method initializes the default sync date - * - */ - @PostConstruct - @Override - public void init() { - super.init(); - // load sources from configuration - sources = documentImportService.loadSourcesFromConfiguration(getConfiguration()); - } - - @Override - public String getName() { - return DocumentImportScheduler.DOCUMENT_IMPORTER_NAME; - } - - /** - * Returns the sepa scheduler class name - */ - @Override - public String getSchedulerClass() { - return DocumentImportScheduler.class.getName(); - } - - @SuppressWarnings("rawtypes") - @Override - public void saveConfiguration() { - ItemCollection config = getConfiguration(); - List mapItemList = new ArrayList(); - // convert the option ItemCollection elements into a List of Map - if (sources != null) { - logger.fine("Convert option items into Map..."); - // iterate over all items.. - for (ItemCollection orderItem : sources) { - mapItemList.add(orderItem.getAllItems()); - } - config.replaceItemValue(DocumentImportService.ITEM_SOURCES, mapItemList); - } - - super.saveConfiguration(); - } - - /** - * Returns a list of all source objects - * - * @return - */ - public List getSources() { - return sources; - } - - public void setSources(List sources) { - this.sources = sources; - } - - /** - * Returns the currently selected source - * - * @return - */ - public ItemCollection getSource() { - return source; - } - - public void setSource(ItemCollection source) { - this.source = source; - } - - /** - * Adds a new filter option. The type of the option (FTP|IMAP) must be - * specified. - */ - public void addSource() { - if (sources == null) { - sources = new ArrayList(); - } - source = new ItemCollection(); - source.setItemValue("index", sources.size()); - // itemCol.replaceItemValue("type", type); - sources.add(source); - } - - /** - * Selects the current source by index - * - * @param optionName - */ - public void selectSource(int index) { - if (sources != null) { - source = sources.get(index); - } - } - - /** - * Removes an option by index - * - * @param optionName - */ - public void removeSource(int index) { - if (sources != null) { - sources.remove(index); - } - } - - /** - * Moves the current source object one position down in the list of sources - * - * @param optionName - */ - public void moveSourceDown(int index) { - if (sources != null && index < sources.size() - 1) { - source = sources.get(index); - sources.remove(index); - sources.add(index + 1, source); - - // re-index sources.... - int iPos = 0; - for (ItemCollection item : sources) { - item.setItemValue("index", iPos); - iPos++; - } - } - } - - /** - * Moves the current source object one position up in the list of sources - * - * @param optionName - */ - public void moveSourceUp(int index) { - if (sources != null && index > 0) { - source = sources.get(index); - sources.remove(index); - sources.add(index - 1, source); - - // re-index sources.... - int iPos = 0; - for (ItemCollection item : sources) { - item.setItemValue("index", iPos); - iPos++; - } - } - } - -} diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportEvent.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportEvent.java deleted file mode 100644 index 0c7ede2..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportEvent.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Imixs-Workflow - * - * Copyright (C) 2001-2020 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Project: - * https://www.imixs.org - * https://github.com/imixs/imixs-workflow - * - * Contributors: - * Imixs Software Solutions GmbH - Project Management - * Ralph Soika - Software Developer - */ - -package org.imixs.workflow.importer; - -import java.util.ArrayList; -import java.util.List; - -import org.imixs.workflow.ItemCollection; - -/** - * The DocumentImportEvent provides a CDI observer pattern. The - * DocumentImportEvent is fired by the DocumentImportScheduler EJB. An event - * Observer can react on this event to process imports form a external data - * source. - *

- * The DocumentImportEvent contains the property 'source' with a description of - * the data source. The source object provides the following items: - *

    - *
  • type - type of the data source (e.g. FTP, IMAP, ...) - *
  • server - server name of the data source - *
  • port - optional server port - *
  • userId - optional userId to access the server - *
  • password - optional password to access the server - *
  • workflowGroup - the workflow group a new document should be assigned to. - *
- *

- * The property 'result' indicates if the source was processed completely or if - * the source can be processed by the next processor. The result is evaluated by - * the DocumentImportScheduler service. - *

- * If the data source was completely processed by the adapter the adapter should - * return the processing result PROCESSING_COMPLETED = 1 . Otherwise - * PROCESSING_OUTSTANDING = 0. - *

- * An adapter can signal an error by setting the processing result to - * PROCESSING_ERROR = 2 . The property 'message' can be filled with a error - * message text. - * - * - * @author Ralph Soika - * @version 1.0 - * @see org.imixs.workflow.engine.SetupService - */ -public class DocumentImportEvent { - - public static final int PROCESSING_OUTSTANDING = 0; - public static final int PROCESSING_COMPLETED = 1; - public static final int PROCESSING_ERROR = 2; - - private int result; - private List messages; - private ItemCollection source; - - public DocumentImportEvent(ItemCollection source) { - super(); - this.source = source; - this.messages = new ArrayList(); - } - - public ItemCollection getSource() { - return source; - } - - public int getResult() { - return result; - } - - public void setResult(int result) { - this.result = result; - } - - public void appendMessage(String message) { - messages.add(message); - } - - public List getMessages() { - return messages; - } - - public void setMessages(List messages) { - this.messages = messages; - } - -} diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportScheduler.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportScheduler.java deleted file mode 100644 index 34e362a..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportScheduler.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Imixs Workflow Technology - * Copyright (C) 2001, 2008 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Imixs Software Solutions GmbH - initial API and implementation - * Ralph Soika - *******************************************************************************/ -package org.imixs.workflow.importer; - -import java.util.List; -import java.util.logging.Logger; - -import javax.ejb.EJB; -import javax.enterprise.event.Event; -import javax.inject.Inject; - -import org.imixs.workflow.ItemCollection; -import org.imixs.workflow.engine.scheduler.Scheduler; -import org.imixs.workflow.engine.scheduler.SchedulerException; -import org.imixs.workflow.engine.scheduler.SchedulerService; -import org.imixs.workflow.exceptions.QueryException; - -/** - * The DocumentImportScheduler iterates over all source definition and sends a - * DocumentImportEvent to process the source by an external service - * implementation. - * - * @see SchedulerService - * @author rsoika - * - */ -public class DocumentImportScheduler implements Scheduler { - - public static final String DOCUMENT_IMPORTER_NAME = "DOCUMENT_IMPORTER"; - - @EJB - DocumentImportService documentImportService; - - @Inject - protected Event importEvents; - - private static Logger logger = Logger.getLogger(DocumentImportScheduler.class.getName()); - - /** - * This method iterates over all source definitions defined by the scheduler - * configuration. For each source a DocumentImportEvent is send. An observer can - * process the source. If a event returns PROCESSING_RESULT_COMPLETED = 1 than - * no more events will be fired for this source. - * - * - * @param timer - * @throws SchedulerException - * @throws QueryException - */ - public ItemCollection run(ItemCollection configuration) throws SchedulerException { - - if (importEvents != null) { - // load all sources - List sources = documentImportService.loadSourcesFromConfiguration(configuration); - if (sources.size() > 0) { - documentImportService.logMessage("...Starting processing " + sources.size() + " sources", configuration); - for (ItemCollection source : sources) { - // Finally fire the DocumentImportEvent. This allows CDI Observers to process - // the import - DocumentImportEvent importEvent = new DocumentImportEvent(source); - importEvents.fire(importEvent); - // append all messages.... - configuration.appendItemValue(Scheduler.ITEM_LOGMESSAGE, importEvent.getMessages()); - if (importEvent.getResult() == DocumentImportEvent.PROCESSING_ERROR) { - logger.severe("...Document Import Error"); - } - } - documentImportService.logMessage("...All sources processed", configuration); - } else { - documentImportService.logMessage("...No sources defined!", configuration); - return configuration; - } - } - return configuration; - } - - -} diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportService.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportService.java deleted file mode 100644 index 4e1d47e..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/DocumentImportService.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * Imixs Workflow Technology - * Copyright (C) 2001, 2008 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Imixs Software Solutions GmbH - initial API and implementation - * Ralph Soika - *******************************************************************************/ -package org.imixs.workflow.importer; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Logger; - -import javax.ejb.EJB; -import javax.ejb.LocalBean; -import javax.ejb.Stateless; - -import org.imixs.workflow.ItemCollection; -import org.imixs.workflow.engine.WorkflowService; -import org.imixs.workflow.engine.scheduler.Scheduler; -import org.imixs.workflow.exceptions.PluginException; - -/** - * The DocumentImportService provides definitions and methods to process a - * import source. - * - * @author rsoika - * - */ -@Stateless -@LocalBean -public class DocumentImportService { - - public final static String ITEM_SOURCES = "sources"; - public final static String SOURCE_ITEM_SERVER = "server"; - public final static String SOURCE_ITEM_PORT = "port"; - public final static String SOURCE_ITEM_USER = "user"; - public final static String SOURCE_ITEM_PASSWORD = "password"; - public final static String SOURCE_ITEM_TASK = "task"; - public final static String SOURCE_ITEM_EVENT = "event"; - public final static String SOURCE_ITEM_WORKFLOWGROUP = "workflowgroup"; - public final static String SOURCE_ITEM_MODELVERSION = "modelversion"; - public final static String SOURCE_ITEM_SELECTOR = "selector"; - public final static String SOURCE_ITEM_OPTIONS = "options"; - - private static Logger logger = Logger.getLogger(DocumentImportService.class.getName()); - - @EJB - WorkflowService workflowService; - - /** - * This method returns a list of ItemCollection objects representing the sources - * defined in a Importer configuration. - * - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public List loadSourcesFromConfiguration(ItemCollection configuration) { - // load sources from configuration - ArrayList sources = new ArrayList(); - List mapItems = configuration.getItemValue(ITEM_SOURCES); - for (Object mapOderItem : mapItems) { - if (mapOderItem instanceof Map) { - ItemCollection itemCol = new ItemCollection((Map) mapOderItem); - sources.add(itemCol); - } - } - return sources; - } - - /** - * Creates a new log entry and stores the message into an optional event - * - * @param message - * @param source - */ - public void logMessage(String message, DocumentImportEvent event) { - if (event != null) { - event.appendMessage(message); - } - logger.info(message); - - } - - /** - * Creates a new log entry and stores the message into the item - * '_scheduler_logmessage' of an optional scheduler document - * - * @param message - * @param source - */ - public void logMessage(String message, ItemCollection config) { - if (config != null) { - config.appendItemValueUnique(Scheduler.ITEM_LOGMESSAGE, message); - } - logger.info(message); - - } - - /** - * This helper method evaluates the options and returns a Properties object - * - * @throws PluginException - */ - public Properties getOptionsProperties(ItemCollection source) { - Properties properties=new Properties(); - String optionsText = source.getItemValueString(SOURCE_ITEM_OPTIONS); - - // split in new lines - String[] options = optionsText.split("\n"); - - logger.fine("...read source properties"); - for (String sProperty :options) { - - int ipos = sProperty.indexOf('='); - if (ipos > 0) { - String sKey = sProperty.substring(0, sProperty.indexOf('=')); - String sValue = sProperty.substring(sProperty.indexOf('=') + 1); - properties.setProperty(sKey, sValue); - } - } - - return properties; - - } - -} diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/EmailImportAdapter.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/EmailImportAdapter.java deleted file mode 100644 index f9f1d59..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/EmailImportAdapter.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Imixs-Workflow - * - * Copyright (C) 2001-2020 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Project: - * https://www.imixs.org - * https://github.com/imixs/imixs-workflow - * - * Contributors: - * Imixs Software Solutions GmbH - Project Management - * Ralph Soika - Software Developer - */ - -package org.imixs.workflow.importer.adapter; - -import java.util.logging.Logger; - -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.enterprise.event.Observes; - -import org.imixs.workflow.engine.ModelService; -import org.imixs.workflow.engine.WorkflowService; -import org.imixs.workflow.importer.DocumentImportEvent; -import org.imixs.workflow.importer.DocumentImportService; - -/** - * The EmailImportAdapter scanns a IMAP account - * - * @author rsoika - * - */ -@Stateless -public class EmailImportAdapter { - - private static Logger logger = Logger.getLogger(EmailImportAdapter.class.getName()); - - @EJB - WorkflowService workflowService; - - @EJB - ModelService modelService; - - @EJB - DocumentImportService documentImportService; - - /** - * This method reacts on a CDI ImportEvent and reads documents form a ftp server. - * - * - */ - public void onEvent(@Observes DocumentImportEvent event) { - - - // TODO https://sandstorm.de/de/blog/post/emails-abfragen-per-imap-in-java.html - - } - - - -} diff --git a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/FTPImportAdapter.java b/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/FTPImportAdapter.java deleted file mode 100644 index 28192ea..0000000 --- a/imixs-adapters-import/src/main/java/org/imixs/workflow/importer/adapter/FTPImportAdapter.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Imixs-Workflow - * - * Copyright (C) 2001-2020 Imixs Software Solutions GmbH, - * http://www.imixs.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You can receive a copy of the GNU General Public - * License at http://www.gnu.org/licenses/gpl.html - * - * Project: - * https://www.imixs.org - * https://github.com/imixs/imixs-workflow - * - * Contributors: - * Imixs Software Solutions GmbH - Project Management - * Ralph Soika - Software Developer - */ - -package org.imixs.workflow.importer.adapter; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.logging.Logger; - -import javax.ejb.EJB; -import javax.ejb.Stateless; -import javax.enterprise.event.Observes; -import javax.ws.rs.core.MediaType; - -import org.apache.commons.net.ftp.FTP; -import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPFile; -import org.apache.commons.net.ftp.FTPSClient; -import org.imixs.workflow.FileData; -import org.imixs.workflow.ItemCollection; -import org.imixs.workflow.engine.ModelService; -import org.imixs.workflow.engine.WorkflowService; -import org.imixs.workflow.exceptions.AccessDeniedException; -import org.imixs.workflow.exceptions.ModelException; -import org.imixs.workflow.exceptions.PluginException; -import org.imixs.workflow.exceptions.ProcessingErrorException; -import org.imixs.workflow.importer.DocumentImportEvent; -import org.imixs.workflow.importer.DocumentImportService; - -/** - * The FTPImportAdapter reacts on DocumentImportEvent and processes a FTP data - * source. - * - * @author rsoika - * - */ -@Stateless -public class FTPImportAdapter { - - private static Logger logger = Logger.getLogger(FTPImportAdapter.class.getName()); - - @EJB - WorkflowService workflowService; - - @EJB - ModelService modelService; - - @EJB - DocumentImportService documentImportService; - - /** - * This method reacts on a CDI ImportEvent and reads documents form a ftp - * server. - * - * - */ - public void onEvent(@Observes DocumentImportEvent event) { - - // check if source is already completed - if (event.getResult() == DocumentImportEvent.PROCESSING_COMPLETED) { - logger.finest("...... import source already completed - no processing will be performed."); - return; - } - - if (!"FTP".equalsIgnoreCase(event.getSource().getItemValueString("type"))) { - // ignore data source - logger.finest("...... type '" + event.getSource().getItemValueString("type") + "' skiped."); - return; - } - - String ftpServer = event.getSource().getItemValueString(DocumentImportService.SOURCE_ITEM_SERVER); - String ftpPort = event.getSource().getItemValueString(DocumentImportService.SOURCE_ITEM_PORT); - String ftpUser = event.getSource().getItemValueString(DocumentImportService.SOURCE_ITEM_USER); - String ftpPassword = event.getSource().getItemValueString(DocumentImportService.SOURCE_ITEM_PASSWORD); - String ftpPath = event.getSource().getItemValueString(DocumentImportService.SOURCE_ITEM_SELECTOR); - - if (!ftpPath.startsWith("/")) { - ftpPath = "/" + ftpPath; - } - if (!ftpPath.endsWith("/")) { - ftpPath = ftpPath + "/"; - } - - // if no server is given we exit - if (ftpServer.isEmpty()) { - logger.warning("...... no server specified!"); - return; - } - - if (ftpPort.isEmpty()) { - // set default port - ftpPort = "21"; - } - - FTPClient ftpClient = null; - try { - logger.finest("......read directories ..."); - // TLS - ftpClient = new FTPSClient("TLS", false); - ftpClient.setControlEncoding("UTF-8"); - ftpClient.connect(ftpServer, Integer.parseInt(ftpPort)); - if (ftpClient.login(ftpUser, ftpPassword) == false) { - documentImportService.logMessage("FTP file transfer failed: login failed!",event); - event.setResult(DocumentImportEvent.PROCESSING_ERROR); - return; - } - - ftpClient.enterLocalPassiveMode(); - logger.finest("...... FileType=" + FTP.BINARY_FILE_TYPE); - ftpClient.setFileType(FTP.BINARY_FILE_TYPE); - ftpClient.setControlEncoding("UTF-8"); - - logger.finest("......scan files from: " + ftpPath); - /* - * create a new workitem for each document - */ - FTPFile[] allFiles = ftpClient.listFiles(ftpPath); - int count = 0; - if (allFiles.length > 0) { - documentImportService.logMessage(allFiles.length + " files found ", event); - - for (FTPFile file : allFiles) { - // if this is a directory or symlink then we do ignore this entry - if (!file.isFile()) { - documentImportService.logMessage( - "'" + file.getName() + "' os not a valid file, object will be ignored!", - event); - continue; - } - logger.info("import file " + file.getName() + "..."); - String fullFileName = ftpPath + "/" + file.getName(); - try (ByteArrayOutputStream is = new ByteArrayOutputStream();) { - ftpClient.retrieveFile(fullFileName, is); - byte[] rawData = is.toByteArray(); - if (rawData != null && rawData.length > 0) { - logger.finest("......file '" + file.getName() + "' successfull read - bytes size = " - + rawData.length); - // create new workitem - createWorkitem(event.getSource(), file.getName(), rawData); - documentImportService.logMessage("....imported '" + file.getName() + "'",event); - count++; - } else { - documentImportService.logMessage( - "Warning - invalid file content '" + file.getName() + "' - file will be deleted!", - event); - } - // finally delete the file.... - ftpClient.deleteFile(fullFileName); - } catch (AccessDeniedException | ProcessingErrorException | PluginException | ModelException e) { - - documentImportService.logMessage("FTP import failed: " + e.getMessage(),event); - event.setResult(DocumentImportEvent.PROCESSING_ERROR); - return; - } - } - documentImportService.logMessage(count + " new files imported.", event); - } else { - documentImportService.logMessage(ftpPath + "No files found, directory is empty", event); - } - - } catch (IOException e) { - logger.severe("FTP I/O Error: " + e.getMessage()); - int r = ftpClient.getReplyCode(); - logger.severe("FTP ReplyCode=" + r); - - documentImportService.logMessage("FTP file transfer failed (replyCode=" + r + ") : " + e.getMessage(),event); - event.setResult(DocumentImportEvent.PROCESSING_ERROR); - return; - - } finally { - // do logout.... - try { - - ftpClient.logout(); - ftpClient.disconnect(); - } catch (IOException e) { - documentImportService.logMessage("FTP file transfer failed: " + e.getMessage(),event); - event.setResult(DocumentImportEvent.PROCESSING_ERROR); - return; - } - } - - // completed - event.setResult(DocumentImportEvent.PROCESSING_COMPLETED); - - } - - /** - * Creates and processes a new workitem with a given filedata - * - * @return - * @throws ModelException - * @throws PluginException - * @throws ProcessingErrorException - * @throws AccessDeniedException - */ - public ItemCollection createWorkitem(ItemCollection source, String fileName, byte[] rawData) - throws AccessDeniedException, ProcessingErrorException, PluginException, ModelException { - ItemCollection workitem = new ItemCollection(); - workitem.model(source.getItemValueString(DocumentImportService.SOURCE_ITEM_MODELVERSION)); - workitem.task(source.getItemValueInteger(DocumentImportService.SOURCE_ITEM_TASK)); - workitem.event(source.getItemValueInteger(DocumentImportService.SOURCE_ITEM_EVENT)); - workitem.setWorkflowGroup(source.getItemValueString("workflowgroup")); - - - String contentType = MediaType.WILDCARD; - if (fileName.toLowerCase().endsWith(".pdf")) { - contentType = "Application/PDF"; - } - // set file data - FileData fileData = new FileData(fileName, rawData, contentType, null); - workitem.addFileData(fileData); - workitem = workflowService.processWorkItemByNewTransaction(workitem); - - return workitem; - } - -} diff --git a/imixs-adapters-import/src/main/resources/META-INF/beans.xml b/imixs-adapters-import/src/main/resources/META-INF/beans.xml deleted file mode 100644 index df2f19f..0000000 --- a/imixs-adapters-import/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/imixs-adapters-import/src/main/resources/META-INF/copyright.txt b/imixs-adapters-import/src/main/resources/META-INF/copyright.txt deleted file mode 100644 index 752d881..0000000 --- a/imixs-adapters-import/src/main/resources/META-INF/copyright.txt +++ /dev/null @@ -1,24 +0,0 @@ - Imixs Workflow - Copyright (C) 2001, 2019 Imixs Software Solutions GmbH, - http://www.imixs.com - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You can receive a copy of the GNU General Public - License at http://www.gnu.org/licenses/gpl.html - - Project: - http://www.imixs.org - http://java.net/projects/imixs-workflow - - Contributors: - Imixs Software Solutions GmbH - initial API and implementation - Ralph Soika - Software Developer diff --git a/imixs-adapters-import/src/main/resources/META-INF/licence.txt b/imixs-adapters-import/src/main/resources/META-INF/licence.txt deleted file mode 100644 index d511905..0000000 --- a/imixs-adapters-import/src/main/resources/META-INF/licence.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/imixs-adapters-import/src/main/webapp/pages/admin/document_import.xhtml b/imixs-adapters-import/src/main/webapp/pages/admin/document_import.xhtml deleted file mode 100644 index b04695f..0000000 --- a/imixs-adapters-import/src/main/webapp/pages/admin/document_import.xhtml +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - - - - - - - - - - -
-
-

Dokument Import

-
- - - -
- - -
- - - -
- -
-

Define a crontab to schedule the import processor.

-
- - - -
- - -
- -
-

Define a destination IMAP server and assign mail addresses to specific workflow groups.

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PosTypeWorkflowgroupModelversionTaskEvent - -
- # - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -

Order ID #

-
-
-
Type
-
- - - - - - -
-
- -
-
Workflowgroup
-
- - - - - -
-
-
-
- -
-
Workflowmodel
-
- - -
-
-
-
Task ID
-
- - -
-
-
-
Event ID
-
- - -
-
-
- -
- -
-
-
Server : Port
-
- - : - -
-
- - -
-
User
-
- - -
-
- -
-
Password
-
- - -
-
-
-
-
-
Selector
-
- - -

A selector can be an optional regular expression to be used to select a subset of data

-
-
-
-
Options
-
- - -

You can apply custom properties here. -

-
-
-
-
- - - - -
- - -
- -
- -
- - - - - -
- - -
- - - - - - -
-
-
-
- - - -
diff --git a/imixs-adapters-import/src/main/webapp/pages/admin/sub_scheduler_control.xhtml b/imixs-adapters-import/src/main/webapp/pages/admin/sub_scheduler_control.xhtml deleted file mode 100644 index 79f3ab5..0000000 --- a/imixs-adapters-import/src/main/webapp/pages/admin/sub_scheduler_control.xhtml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -
- - -
- - - - - -

- - - -
Error: #{schedulerController.configuration.item['_scheduler_errormessage']} -
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - No Data. - - -
- -
- - - - - - - - - - - - - - - - - -
- -
\ No newline at end of file diff --git a/pom.xml b/pom.xml index 86b498a..443e077 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,6 @@ imixs-adapters-sepa imixs-adapters-qrcode imixs-adapters-kafka - imixs-adapters-import @@ -19,6 +18,7 @@ 5.1.10 4.1.6 2.2 + 2.0.19