Added: incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessInstanceImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessInstanceImpl.java?view=auto&rev=475609 ============================================================================== --- incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessInstanceImpl.java (added) +++ incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessInstanceImpl.java Wed Nov 15 23:31:18 2006 @@ -0,0 +1,206 @@ +/* + * 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.tuscany.container.dataaccessscript; + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Map; + +import org.apache.tuscany.container.dataaccess.DataAccessInstance; +import org.apache.tuscany.das.rdb.Command; +import org.apache.tuscany.das.rdb.DAS; + +import commonj.sdo.DataObject; +/** + * An invokeable instance of a DataAccessScript script. + */ +public class DataAccessInstanceImpl implements DataAccessInstance { + + private DAS dasInstance; + private String dataAccessType; + + public DataAccessInstanceImpl(DAS das, String dataAccessType){ + this.dasInstance = das; + this.dataAccessType = dataAccessType; + } + + public Object invokeFunction(String functionName, Object[] args, Class returnType) { + Command cmd = null; + System.out.println("functionName:"+functionName); + + ArrayList paramsList = null; + if(args != null){ + paramsList = (ArrayList)args[0]; + } + + //if any of the 3 below - its dynamic way , else , its static way + if(!functionName.equals("execute") && + !functionName.equals("executeQuery") && + !functionName.equals("applyChanges")){ + //try for static way + String commandName = CommandMapper.getCommandName(functionName); + System.out.println("commandName:"+commandName); + cmd = dasInstance.getCommand(commandName); + } + else{ + //upto below statement is generic DAS..but select,etc..are particular + //to RDBDAS + cmd = dasInstance.getCommand((String)paramsList.get(0)); + } + + //Particular to RDBDAS + if(this.dataAccessType.equals(DataAccessEngine.RDB)){ + DataObject dataObj = null; + dataObj = invokeRDBDASFunction(cmd, paramsList); + return dataObj; + } + + //TODO ...implement for other than RDB + return null; + } + + private DataObject invokeRDBDASSelect(Command cmd, ArrayList paramsList){ + DataObject dObject = null; + + if(paramsList != null){ + if(paramsList.size()>=3){ + Map<Integer, Object> inParams = new Hashtable<Integer, Object>(); + inParams = (Map<Integer, Object>)paramsList.get(2); + DataAccessUtils.fromJavaToRDBDASPositionBased(inParams, cmd); + } + } + dObject = cmd.executeQuery(); + if(dObject == null){ + System.out.println("null result returned in select"); + } + return dObject; + } + + private void invokeRDBDASDelete(Command cmd, ArrayList paramsList){ + if(paramsList != null){ + if(paramsList.size()>=3){ + Map<Integer, Object> inParams = new Hashtable<Integer, Object>(); + inParams = (Map<Integer, Object>)paramsList.get(2); + DataAccessUtils.fromJavaToRDBDASPositionBased(inParams, cmd); + } + } + cmd.execute(); + } + + private void invokeRDBDASInsert(Command cmd, ArrayList paramsList){ + if(paramsList != null){ + if(paramsList.size()>=3){ + Map<Integer, Object> inParams = new Hashtable<Integer, Object>(); + inParams = (Map<Integer, Object>)paramsList.get(2); + DataAccessUtils.fromJavaToRDBDASPositionBased(inParams, cmd); + } + } + cmd.execute(); + } + + private void invokeRDBDASUpdate(Command cmd, ArrayList paramsList){ + if(paramsList != null){ + if(paramsList.size()>=4){ + + String paramsTableName = paramsList.get(1).toString(); + int idx = paramsTableName.indexOf(DataAccessEngine.SEPARATOR); + String tableName = paramsTableName.substring(idx+1); + + String genericSelectForRoot = "select * from "+ tableName; + + System.out.println("genericSelectForRoot:"+genericSelectForRoot); + cmd = dasInstance.createCommand(genericSelectForRoot); + + //set UPD and WHERE params + if(paramsList.get(2) instanceof Map){ + Map<String, Object> updParams = (Map<String, Object>)paramsList.get(2); + + if(paramsList.get(3) instanceof Map){ + Map<String, Object> whereParams = (Map<String, Object>)paramsList.get(3); + DataObject root = DataAccessUtils.fromJavaToRDBDASNameBased(updParams, whereParams, cmd, tableName); + dasInstance.applyChanges(root); + } + } + } + } + } + + private DataObject invokeRDBDASProcedure(Command cmd, ArrayList paramsList){ + DataObject dataObj = null; + if(paramsList != null){ + //set IN params + if(paramsList.size()>=3){ + if(paramsList.get(2) instanceof Map){ + Map<Integer, Object> inParams = (Map<Integer, Object>)paramsList.get(2); + DataAccessUtils.fromJavaToRDBDASPositionBased(inParams, cmd); + } + + } + + dataObj = cmd.executeQuery(); + + if(paramsList.size()>=4){ + if(paramsList.get(3) instanceof Map){ + Map<Integer, Object> outParams = (Map<Integer, Object>)paramsList.get(3); + DataAccessUtils.fromRDBDASToJavaPositionBased(outParams, cmd); + paramsList.add(3, outParams); + } + } + + System.out.println("executed SP.."); + } + return dataObj; + } + + private DataObject invokeRDBDASFunction(Command cmd, ArrayList paramsList){ + String commandKind = null; + //TODO + commandKind = (String)paramsList.get(1); + + System.out.println("commandKind:"+commandKind); + + if(commandKind.equals(DataAccessEngine.SELECT)){ + DataObject dataObj = invokeRDBDASSelect(cmd, paramsList); + return dataObj; + } + + if(commandKind.equals(DataAccessEngine.DELETE)){ + invokeRDBDASDelete(cmd, paramsList); + return null; + } + + if(commandKind.equals(DataAccessEngine.INSERT)){ + invokeRDBDASInsert(cmd, paramsList); + return null; + } + + if(commandKind.startsWith(DataAccessEngine.UPDATE)){ + invokeRDBDASUpdate(cmd, paramsList); + return null; + } + + if(commandKind.equals(DataAccessEngine.PROCEDURE)){ + DataObject dataObj = invokeRDBDASProcedure(cmd, paramsList); + return dataObj; + } + + //TODO..need to implement for UPDATE, CREATE etc. + return null; + } +}
Added: incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessUtils.java URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessUtils.java?view=auto&rev=475609 ============================================================================== --- incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessUtils.java (added) +++ incubator/tuscany/sandbox/lresende/container.das/src/main/java/org/apache/tuscany/container/dataaccessscript/DataAccessUtils.java Wed Nov 15 23:31:18 2006 @@ -0,0 +1,75 @@ +/* + * 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.tuscany.container.dataaccessscript; + +import java.util.Iterator; +import java.util.Map; + +import org.apache.tuscany.das.rdb.Command; + +import commonj.sdo.DataObject; + +public class DataAccessUtils { + public static void fromRDBDASToJavaPositionBased(Map outParams, Command cmd){ + for (Iterator i = outParams.keySet().iterator(); i.hasNext();) { + Integer odx = (Integer)i.next(); + + //result can be of any Object type + Object outRes = null; + outRes = cmd.getParameter(odx); + + outParams.put(odx, outRes); + } + } + + public static void fromJavaToRDBDASPositionBased(Map inParams, Command cmd){ + for (Iterator i = inParams.keySet().iterator(); i.hasNext();) { + Integer idx = (Integer)i.next(); + + Object val = inParams.get(idx); + cmd.setParameter(idx, val); + } + } + + public static DataObject fromJavaToRDBDASNameBased(Map updParams, Map whereParams, Command cmd, String tableName){ + //currently where clause is only for PKs - by convention + String whereStr = null; + + for (Iterator i = whereParams.keySet().iterator(); i.hasNext();) { + String idx = (String)i.next(); + + Object val = whereParams.get(idx); + whereStr = tableName+"["+val+"]"; + System.out.println("whereStr:"+whereStr); + } + DataObject root = cmd.executeQuery(); + DataObject dObj = root.getDataObject(whereStr); + + for (Iterator i = updParams.keySet().iterator(); i.hasNext();) { + String idx = (String)i.next(); + + Object val = updParams.get(idx); + dObj.set(idx, val); + } + + return root; + } + + //TODO ..similarly there will be fromJavaToXQueryDAS()..and revese etc. +} Added: incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/das.system.scdl URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/das.system.scdl?view=auto&rev=475609 ============================================================================== --- incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/das.system.scdl (added) +++ incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/das.system.scdl Wed Nov 15 23:31:18 2006 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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. +--> +<!-- + JavaScript configuration for the launcher environment. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT" + name="org.apache.tuscany.launcher.DataAccessImplementation"> + + <component name="dataaccess.implementationLoader"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessImplementationLoader"/> + </component> + + <component name="dataaccess.componentTypeLoader"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessComponentTypeLoader"/> + </component> + + <component name="dataaccess.componentBuilder"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessComponentBuilder"/> + </component> + + <!-- Xml Instance Registry service --> +<!-- <component name="xmlInstRegistry"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.utils.xmlfromxsd.XmlInstanceRegistryImpl"/> + </component>--> + +</composite> Added: incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/default.scdl URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/default.scdl?view=auto&rev=475609 ============================================================================== --- incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/default.scdl (added) +++ incubator/tuscany/sandbox/lresende/container.das/src/main/resources/META-INF/sca/default.scdl Wed Nov 15 23:31:18 2006 @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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. +--> +<!-- + JavaScript configuration for the launcher environment. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:system="http://tuscany.apache.org/xmlns/system/1.0-SNAPSHOT" + name="org.apache.tuscany.launcher.DataAccessImplementation"> + + <dependency xmlns="http://tuscany.apache.org/xmlns/1.0-SNAPSHOT"> + <group>org.apache.tuscany.sca.services.containers</group> + <name>dataaccess</name> + <version>1.0-incubator-M2-SNAPSHOT</version> + </dependency> + + <component name="dataaccess.implementationLoader"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessImplementationLoader"/> + </component> + + <component name="dataaccess.componentTypeLoader"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessComponentTypeLoader"/> + </component> + + <component name="dataaccess.componentBuilder"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.DataAccessComponentBuilder"/> + </component> + + <!-- Xml Instance Registry service --> + <!--<component name="xmlInstRegistry"> + <system:implementation.system class="org.apache.tuscany.container.dataaccess.utils.xmlfromxsd.XmlInstanceRegistryImpl"/> + </component>--> + +</composite> \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
