adding starting scripts to workflow catalog
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/d2501c33 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/d2501c33 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/d2501c33 Branch: refs/heads/master Commit: d2501c332826cebf3b972cbc499b10e1743f53ff Parents: d1bb382 Author: Chathuri Wimalasena <[email protected]> Authored: Thu Feb 4 13:41:18 2016 -0500 Committer: Chathuri Wimalasena <[email protected]> Committed: Thu Feb 4 13:41:18 2016 -0500 ---------------------------------------------------------------------- .../airavata/api/server/AiravataAPIServer.java | 3 + .../server/handler/AiravataServerHandler.java | 14 +- .../server/util/WorkflowCatalogInitUtil.java | 162 +++++++++++++++++++ .../catalog/impl/WorkflowCatalogImpl.java | 20 +++ .../src/main/resources/workflow-derby.sql | 128 --------------- .../src/main/resources/workflow-mysql.sql | 128 --------------- .../main/resources/workflowcatalog-derby.sql | 128 +++++++++++++++ .../main/resources/workflowcatalog-mysql.sql | 128 +++++++++++++++ .../airavata/registry/cpi/WorkflowCatalog.java | 2 + .../workflow-models/workflow_data_model.thrift | 9 +- 10 files changed, 456 insertions(+), 266 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java index d4eee2c..09d4c3f 100644 --- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java +++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java @@ -33,11 +33,13 @@ import org.apache.airavata.api.server.security.interceptor.SecurityModule; import org.apache.airavata.api.server.util.AppCatalogInitUtil; import org.apache.airavata.api.server.util.Constants; import org.apache.airavata.api.server.util.RegistryInitUtil; +import org.apache.airavata.api.server.util.WorkflowCatalogInitUtil; import org.apache.airavata.common.exception.ApplicationSettingsException; import org.apache.airavata.common.utils.IServer; import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.model.error.AiravataErrorType; import org.apache.airavata.model.error.AiravataSystemException; +import org.apache.airavata.registry.core.workflow.catalog.utils.WorkflowCatalogUtils; import org.apache.airavata.security.AiravataSecurityException; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; @@ -68,6 +70,7 @@ public class AiravataAPIServer implements IServer{ try { RegistryInitUtil.initializeDB(); AppCatalogInitUtil.initializeDB(); + WorkflowCatalogInitUtil.initializeDB(); final String serverHost = ServerSettings.getSetting(Constants.API_SERVER_HOST, null); if (!ServerSettings.isTLSEnabled()) { final int serverPort = Integer.parseInt(ServerSettings.getSetting(Constants.API_SERVER_PORT, "8930")); http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java index c8de2b7..78e39d2 100644 --- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java +++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java @@ -4147,7 +4147,7 @@ public class AiravataServerHandler implements Airavata.Iface { } try { return getWorkflowCatalog().getAllWorkflows(gatewayId); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in retrieving all workflow template Ids."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4162,7 +4162,7 @@ public class AiravataServerHandler implements Airavata.Iface { throws InvalidRequestException, AiravataClientException, AuthorizationException, AiravataSystemException, TException { try { return getWorkflowCatalog().getWorkflow(workflowTemplateId); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in retrieving the workflow "+workflowTemplateId+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4177,7 +4177,7 @@ public class AiravataServerHandler implements Airavata.Iface { throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { getWorkflowCatalog().deleteWorkflow(workflowTemplateId); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in deleting the workflow "+workflowTemplateId+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4196,7 +4196,7 @@ public class AiravataServerHandler implements Airavata.Iface { } try { return getWorkflowCatalog().registerWorkflow(workflow, gatewayId); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in registering the workflow "+workflow.getName()+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4211,7 +4211,7 @@ public class AiravataServerHandler implements Airavata.Iface { throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { getWorkflowCatalog().updateWorkflow(workflowTemplateId, workflow); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in updating the workflow "+workflow.getName()+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4226,7 +4226,7 @@ public class AiravataServerHandler implements Airavata.Iface { throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { return getWorkflowCatalog().getWorkflowTemplateId(workflowName); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in retrieving the workflow template id for "+workflowName+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); @@ -4241,7 +4241,7 @@ public class AiravataServerHandler implements Airavata.Iface { throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { return getWorkflowCatalog().isWorkflowExistWithName(workflowName); - } catch (AppCatalogException e) { + } catch (WorkflowCatalogException e) { String msg = "Error in veriying the workflow for workflow name "+workflowName+"."; logger.error(msg, e); AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/WorkflowCatalogInitUtil.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/WorkflowCatalogInitUtil.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/WorkflowCatalogInitUtil.java new file mode 100644 index 0000000..2a8b75b --- /dev/null +++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/WorkflowCatalogInitUtil.java @@ -0,0 +1,162 @@ +/* +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*/ + +package org.apache.airavata.api.server.util; + +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.common.utils.ServerSettings; +import org.apache.airavata.registry.core.app.catalog.resources.GatewayProfileResource; +import org.apache.derby.drda.NetworkServerControl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.URI; +import java.sql.Connection; +import java.sql.SQLException; + +public class WorkflowCatalogInitUtil { + private static final Logger logger = LoggerFactory.getLogger(WorkflowCatalogInitUtil.class); + public static final String WORKFLOW = "WORKFLOW"; + public static final String WORKFLOWCATALOG_JDBC_DRIVER = "workflowcatalog.jdbc.driver"; + public static final String WORKFLOWCATALOG_JDBC_URL = "workflowcatalog.jdbc.url"; + public static final String WORKFLOWCATALOG_JDBC_USER = "workflowcatalog.jdbc.user"; + public static final String WORKFLOWCATALOG_JDBC_PASSWORD = "workflowcatalog.jdbc.password"; + public static final String START_DERBY_ENABLE = "start.derby.server.mode"; + public static final String DERBY_SERVER_MODE_SYS_PROPERTY = "derby.drda.startNetworkServer"; + private static NetworkServerControl server; + private static JdbcStorage db; + private static String jdbcURl; + private static String jdbcDriver; + private static String jdbcUser; + private static String jdbcPassword; + + + public static void initializeDB() { +// System.setProperty("appcatalog.initialize.state", "0"); + try{ + jdbcDriver = ServerSettings.getSetting(WORKFLOWCATALOG_JDBC_DRIVER); + jdbcURl = ServerSettings.getSetting(WORKFLOWCATALOG_JDBC_URL); + jdbcUser = ServerSettings.getSetting(WORKFLOWCATALOG_JDBC_USER); + jdbcPassword = ServerSettings.getSetting(WORKFLOWCATALOG_JDBC_PASSWORD); + jdbcURl = jdbcURl + "?" + "user=" + jdbcUser + "&" + "password=" + jdbcPassword; + } catch (ApplicationSettingsException e) { + logger.error("Unable to read airavata server properties", e.getMessage()); + } + + if (getDBType(jdbcURl).equals("derby") && isDerbyStartEnabled()) { + startDerbyInServerMode(); + } + db = new JdbcStorage(10, 50, jdbcURl, jdbcDriver, true); + + Connection conn = null; + try { + conn = db.connect(); + if (!DatabaseCreator.isDatabaseStructureCreated(WORKFLOW, conn)) { + DatabaseCreator.createRegistryDatabase("database_scripts/workflowcatalog", conn); + logger.info("New Database created for Workflow Catalog"); + } else { + logger.info("Database already created for Workflow Catalog!"); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new RuntimeException("Database failure", e); + } finally { + db.closeConnection(conn); + try { + if(conn != null){ + if (!conn.getAutoCommit()) { + conn.commit(); + } + conn.close(); + } + } catch (SQLException e) { + logger.error("Error while closing database connection...", e.getMessage(), e); + } + } +// System.setProperty("appcatalog.initialize.state", "1"); + } + + public static String getDBType(String jdbcUrl){ + try{ + String cleanURI = jdbcUrl.substring(5); + URI uri = URI.create(cleanURI); + return uri.getScheme(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + return null; + } + } + + public static boolean isDerbyStartEnabled(){ + try { + String s = ServerSettings.getSetting(START_DERBY_ENABLE); + if("true".equals(s)){ + return true; + } + } catch (ApplicationSettingsException e) { + logger.error("Unable to read airavata server properties", e.getMessage(), e); + return false; + } + return false; + } + + public static void startDerbyInServerMode() { + try { + System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "true"); + server = new NetworkServerControl(InetAddress.getByName("0.0.0.0"), + getPort(jdbcURl), + jdbcUser, jdbcPassword); + java.io.PrintWriter consoleWriter = new java.io.PrintWriter(System.out, true); + server.start(consoleWriter); + } catch (IOException e) { + logger.error("Unable to start Apache derby in the server mode! Check whether " + + "specified port is available"); + } catch (Exception e) { + logger.error("Unable to start Apache derby in the server mode! Check whether " + + "specified port is available"); + } + } + + public static void stopDerbyInServerMode() { + System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "false"); + if (server!=null){ + try { + server.shutdown(); + } catch (Exception e) { + logger.error("Error when stopping the derby server : "+e.getLocalizedMessage()); + } + } + } + + public static int getPort(String jdbcURL){ + try{ + String cleanURI = jdbcURL.substring(5); + URI uri = URI.create(cleanURI); + return uri.getPort(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + return -1; + } + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/workflow/catalog/impl/WorkflowCatalogImpl.java ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/workflow/catalog/impl/WorkflowCatalogImpl.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/workflow/catalog/impl/WorkflowCatalogImpl.java index 8c0ced4..e5e1d0c 100644 --- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/workflow/catalog/impl/WorkflowCatalogImpl.java +++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/workflow/catalog/impl/WorkflowCatalogImpl.java @@ -115,6 +115,12 @@ public class WorkflowCatalogImpl implements WorkflowCatalog { outputResource.setOutputVal(output.getValue()); outputResource.setWfTemplateId(resource.getWfTemplateId()); outputResource.setDataType(output.getType().toString()); + outputResource.setAppArgument(output.getApplicationArgument()); + outputResource.setDataNameLocation(output.getLocation()); + outputResource.setRequired(output.isIsRequired()); + outputResource.setRequiredToCMD(output.isRequiredToAddedToCommandLine()); + outputResource.setOutputStreaming(output.isOutputStreaming()); + outputResource.setDataMovement(output.isDataMovement()); outputResource.save(); } } @@ -169,6 +175,13 @@ public class WorkflowCatalogImpl implements WorkflowCatalog { existingOutput.setOutputVal(output.getValue()); existingOutput.setWfTemplateId(existingWF.getWfTemplateId()); existingOutput.setDataType(output.getType().toString()); + existingOutput.setDataType(output.getType().toString()); + existingOutput.setAppArgument(output.getApplicationArgument()); + existingOutput.setDataNameLocation(output.getLocation()); + existingOutput.setRequired(output.isIsRequired()); + existingOutput.setRequiredToCMD(output.isRequiredToAddedToCommandLine()); + existingOutput.setOutputStreaming(output.isOutputStreaming()); + existingOutput.setDataMovement(output.isDataMovement()); existingOutput.save(); } } @@ -225,6 +238,13 @@ public class WorkflowCatalogImpl implements WorkflowCatalog { existingOutput.setOutputVal(output.getValue()); existingOutput.setWfTemplateId(existingWF.getWfTemplateId()); existingOutput.setDataType(output.getType().toString()); + existingOutput.setDataType(output.getType().toString()); + existingOutput.setAppArgument(output.getApplicationArgument()); + existingOutput.setDataNameLocation(output.getLocation()); + existingOutput.setRequired(output.isIsRequired()); + existingOutput.setRequiredToCMD(output.isRequiredToAddedToCommandLine()); + existingOutput.setOutputStreaming(output.isOutputStreaming()); + existingOutput.setDataMovement(output.isDataMovement()); existingOutput.save(); } } http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-core/src/main/resources/workflow-derby.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/workflow-derby.sql b/modules/registry/registry-core/src/main/resources/workflow-derby.sql deleted file mode 100644 index 8c590f8..0000000 --- a/modules/registry/registry-core/src/main/resources/workflow-derby.sql +++ /dev/null @@ -1,128 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - -CREATE TABLE WORKFLOW -( - TEMPLATE_ID VARCHAR (255) NOT NULL, - WORKFLOW_NAME VARCHAR (255) NOT NULL, - CREATED_USER VARCHAR (255), - GATEWAY_ID VARCHAR (255), - GRAPH CLOB, - IMAGE BLOB, - CREATION_TIME timestamp DEFAULT CURRENT_TIMESTAMP, - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (TEMPLATE_ID) -); - -CREATE TABLE WORKFLOW_INPUT -( - TEMPLATE_ID VARCHAR(255), - INPUT_KEY VARCHAR(255), - INPUT_VALUE CLOB, - DATA_TYPE VARCHAR(255), - METADATA VARCHAR(255), - APP_ARGUMENT VARCHAR(255), - STANDARD_INPUT SMALLINT, - USER_FRIENDLY_DESC VARCHAR(255), - INPUT_ORDER INTEGER, - IS_REQUIRED SMALLINT, - REQUIRED_TO_COMMANDLINE SMALLINT, - DATA_STAGED SMALLINT, - PRIMARY KEY(TEMPLATE_ID,INPUT_KEY), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE WORKFLOW_OUTPUT -( - TEMPLATE_ID VARCHAR(255), - OUTPUT_KEY VARCHAR(255), - OUTPUT_VALUE VARCHAR(255), - DATA_TYPE VARCHAR(255), - IS_REQUIRED SMALLINT, - REQUIRED_TO_COMMANDLINE SMALLINT, - DATA_MOVEMENT SMALLINT, - DATA_NAME_LOCATION VARCHAR(255), - SEARCH_QUERY VARCHAR(255), - APP_ARGUMENT VARCHAR(255), - OUTPUT_STREAMING SMALLINT, - PRIMARY KEY(TEMPLATE_ID,OUTPUT_KEY), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE COMPONENT_STATUS -( - STATUS_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - STATE VARCHAR(255), - REASON VARCHAR(255), - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (STATUS_ID) - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE WORKFLOW_STATUS -( - STATUS_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - STATE VARCHAR(255), - REASON VARCHAR(255), - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (STATUS_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE EDGE -( - EDGE_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (EDGE_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE PORT -( - PORT_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (PORT_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE NODE -( - NODE_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - APPLICATION_ID VARCHAR (255), - APPLICATION_NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (NODE_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-core/src/main/resources/workflow-mysql.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/workflow-mysql.sql b/modules/registry/registry-core/src/main/resources/workflow-mysql.sql deleted file mode 100644 index 3527d60..0000000 --- a/modules/registry/registry-core/src/main/resources/workflow-mysql.sql +++ /dev/null @@ -1,128 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - -CREATE TABLE WORKFLOW -( - TEMPLATE_ID VARCHAR (255) NOT NULL, - WORKFLOW_NAME VARCHAR (255) NOT NULL, - CREATED_USER VARCHAR (255), - GATEWAY_ID VARCHAR (255), - GRAPH LONGTEXT, - IMAGE BLOB, - CREATION_TIME timestamp DEFAULT CURRENT_TIMESTAMP, - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (TEMPLATE_ID) -); - -CREATE TABLE WORKFLOW_INPUT -( - TEMPLATE_ID VARCHAR(255), - INPUT_KEY VARCHAR(255), - INPUT_VALUE VARCHAR(255), - DATA_TYPE VARCHAR(255), - METADATA VARCHAR(255), - APP_ARGUMENT VARCHAR(255), - STANDARD_INPUT SMALLINT, - USER_FRIENDLY_DESC VARCHAR(255), - INPUT_ORDER INTEGER, - IS_REQUIRED SMALLINT, - REQUIRED_TO_COMMANDLINE SMALLINT, - DATA_STAGED SMALLINT, - PRIMARY KEY(TEMPLATE_ID,INPUT_KEY), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE WORKFLOW_OUTPUT -( - TEMPLATE_ID VARCHAR(255), - OUTPUT_KEY VARCHAR(255), - OUTPUT_VALUE LONGTEXT, - DATA_TYPE VARCHAR(255), - IS_REQUIRED SMALLINT, - REQUIRED_TO_COMMANDLINE SMALLINT, - DATA_MOVEMENT SMALLINT, - DATA_NAME_LOCATION VARCHAR(255), - SEARCH_QUERY VARCHAR(255), - APP_ARGUMENT VARCHAR(255), - OUTPUT_STREAMING SMALLINT, - PRIMARY KEY(TEMPLATE_ID,OUTPUT_KEY), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE COMPONENT_STATUS -( - STATUS_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - STATE VARCHAR(255), - REASON VARCHAR(255), - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (STATUS_ID) - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE WORKFLOW_STATUS -( - STATUS_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - STATE VARCHAR(255), - REASON VARCHAR(255), - UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (STATUS_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE EDGE -( - EDGE_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (EDGE_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE PORT -( - PORT_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (PORT_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); - -CREATE TABLE NODE -( - NODE_ID VARCHAR (255) NOT NULL, - TEMPLATE_ID VARCHAR (255) NOT NULL, - NAME VARCHAR (255), - APPLICATION_ID VARCHAR (255), - APPLICATION_NAME VARCHAR (255), - COMPONENT_STATUS_ID VARCHAR(255), - DESCRIPTION VARCHAR(500), - CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (NODE_ID, TEMPLATE_ID), - FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE -); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-core/src/main/resources/workflowcatalog-derby.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/workflowcatalog-derby.sql b/modules/registry/registry-core/src/main/resources/workflowcatalog-derby.sql new file mode 100644 index 0000000..8c590f8 --- /dev/null +++ b/modules/registry/registry-core/src/main/resources/workflowcatalog-derby.sql @@ -0,0 +1,128 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +CREATE TABLE WORKFLOW +( + TEMPLATE_ID VARCHAR (255) NOT NULL, + WORKFLOW_NAME VARCHAR (255) NOT NULL, + CREATED_USER VARCHAR (255), + GATEWAY_ID VARCHAR (255), + GRAPH CLOB, + IMAGE BLOB, + CREATION_TIME timestamp DEFAULT CURRENT_TIMESTAMP, + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (TEMPLATE_ID) +); + +CREATE TABLE WORKFLOW_INPUT +( + TEMPLATE_ID VARCHAR(255), + INPUT_KEY VARCHAR(255), + INPUT_VALUE CLOB, + DATA_TYPE VARCHAR(255), + METADATA VARCHAR(255), + APP_ARGUMENT VARCHAR(255), + STANDARD_INPUT SMALLINT, + USER_FRIENDLY_DESC VARCHAR(255), + INPUT_ORDER INTEGER, + IS_REQUIRED SMALLINT, + REQUIRED_TO_COMMANDLINE SMALLINT, + DATA_STAGED SMALLINT, + PRIMARY KEY(TEMPLATE_ID,INPUT_KEY), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE WORKFLOW_OUTPUT +( + TEMPLATE_ID VARCHAR(255), + OUTPUT_KEY VARCHAR(255), + OUTPUT_VALUE VARCHAR(255), + DATA_TYPE VARCHAR(255), + IS_REQUIRED SMALLINT, + REQUIRED_TO_COMMANDLINE SMALLINT, + DATA_MOVEMENT SMALLINT, + DATA_NAME_LOCATION VARCHAR(255), + SEARCH_QUERY VARCHAR(255), + APP_ARGUMENT VARCHAR(255), + OUTPUT_STREAMING SMALLINT, + PRIMARY KEY(TEMPLATE_ID,OUTPUT_KEY), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE COMPONENT_STATUS +( + STATUS_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + STATE VARCHAR(255), + REASON VARCHAR(255), + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (STATUS_ID) + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE WORKFLOW_STATUS +( + STATUS_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + STATE VARCHAR(255), + REASON VARCHAR(255), + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (STATUS_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE EDGE +( + EDGE_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (EDGE_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE PORT +( + PORT_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (PORT_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE NODE +( + NODE_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + APPLICATION_ID VARCHAR (255), + APPLICATION_NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (NODE_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-core/src/main/resources/workflowcatalog-mysql.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/workflowcatalog-mysql.sql b/modules/registry/registry-core/src/main/resources/workflowcatalog-mysql.sql new file mode 100644 index 0000000..3527d60 --- /dev/null +++ b/modules/registry/registry-core/src/main/resources/workflowcatalog-mysql.sql @@ -0,0 +1,128 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +CREATE TABLE WORKFLOW +( + TEMPLATE_ID VARCHAR (255) NOT NULL, + WORKFLOW_NAME VARCHAR (255) NOT NULL, + CREATED_USER VARCHAR (255), + GATEWAY_ID VARCHAR (255), + GRAPH LONGTEXT, + IMAGE BLOB, + CREATION_TIME timestamp DEFAULT CURRENT_TIMESTAMP, + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (TEMPLATE_ID) +); + +CREATE TABLE WORKFLOW_INPUT +( + TEMPLATE_ID VARCHAR(255), + INPUT_KEY VARCHAR(255), + INPUT_VALUE VARCHAR(255), + DATA_TYPE VARCHAR(255), + METADATA VARCHAR(255), + APP_ARGUMENT VARCHAR(255), + STANDARD_INPUT SMALLINT, + USER_FRIENDLY_DESC VARCHAR(255), + INPUT_ORDER INTEGER, + IS_REQUIRED SMALLINT, + REQUIRED_TO_COMMANDLINE SMALLINT, + DATA_STAGED SMALLINT, + PRIMARY KEY(TEMPLATE_ID,INPUT_KEY), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE WORKFLOW_OUTPUT +( + TEMPLATE_ID VARCHAR(255), + OUTPUT_KEY VARCHAR(255), + OUTPUT_VALUE LONGTEXT, + DATA_TYPE VARCHAR(255), + IS_REQUIRED SMALLINT, + REQUIRED_TO_COMMANDLINE SMALLINT, + DATA_MOVEMENT SMALLINT, + DATA_NAME_LOCATION VARCHAR(255), + SEARCH_QUERY VARCHAR(255), + APP_ARGUMENT VARCHAR(255), + OUTPUT_STREAMING SMALLINT, + PRIMARY KEY(TEMPLATE_ID,OUTPUT_KEY), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE COMPONENT_STATUS +( + STATUS_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + STATE VARCHAR(255), + REASON VARCHAR(255), + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (STATUS_ID) + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE WORKFLOW_STATUS +( + STATUS_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + STATE VARCHAR(255), + REASON VARCHAR(255), + UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (STATUS_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE EDGE +( + EDGE_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (EDGE_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE PORT +( + PORT_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (PORT_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); + +CREATE TABLE NODE +( + NODE_ID VARCHAR (255) NOT NULL, + TEMPLATE_ID VARCHAR (255) NOT NULL, + NAME VARCHAR (255), + APPLICATION_ID VARCHAR (255), + APPLICATION_NAME VARCHAR (255), + COMPONENT_STATUS_ID VARCHAR(255), + DESCRIPTION VARCHAR(500), + CREATED_TIME timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (NODE_ID, TEMPLATE_ID), + FOREIGN KEY (TEMPLATE_ID) REFERENCES WORKFLOW(TEMPLATE_ID) ON DELETE CASCADE +); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/WorkflowCatalog.java ---------------------------------------------------------------------- diff --git a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/WorkflowCatalog.java b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/WorkflowCatalog.java index 34c8ff6..ae7f839 100644 --- a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/WorkflowCatalog.java +++ b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/WorkflowCatalog.java @@ -43,4 +43,6 @@ public interface WorkflowCatalog { public boolean isWorkflowExistWithName(String workflowName) throws WorkflowCatalogException; public void updateWorkflowOutputs(String workflowTemplateId, List<OutputDataObjectType> workflowOutputs) throws WorkflowCatalogException; + + } http://git-wip-us.apache.org/repos/asf/airavata/blob/d2501c33/thrift-interface-descriptions/data-models/workflow-models/workflow_data_model.thrift ---------------------------------------------------------------------- diff --git a/thrift-interface-descriptions/data-models/workflow-models/workflow_data_model.thrift b/thrift-interface-descriptions/data-models/workflow-models/workflow_data_model.thrift index 547ac3a..f688e67 100644 --- a/thrift-interface-descriptions/data-models/workflow-models/workflow_data_model.thrift +++ b/thrift-interface-descriptions/data-models/workflow-models/workflow_data_model.thrift @@ -37,9 +37,12 @@ struct WorkflowModel { 1: required string templateId = airavata_commons.DEFAULT_ID, 2: required string name, 3: required string graph, - 4: optional binary image, - 5: optional list<application_io_models.InputDataObjectType> workflowInputs, - 6: optional list<application_io_models.OutputDataObjectType> workflowOutputs + 4: required string gatewayId, + 5: required string createdUser, + 6: optional binary image, + 7: optional list<application_io_models.InputDataObjectType> workflowInputs, + 8: optional list<application_io_models.OutputDataObjectType> workflowOutputs, + 9: optional i64 creationTime, } enum WorkflowState {
