You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ro...@apache.org on 2007/07/13 20:26:31 UTC
svn commit: r556089 [8/11] - in /incubator/tuscany/cpp/sca:
VSExpress/tuscany_sca/tuscany_sca_cpp/ doc/ runtime/extensions/cpp/
runtime/extensions/cpp/tools/ runtime/extensions/cpp/tools/scagen/
runtime/extensions/cpp/tools/scagen/META-INF/ runtime/ext...
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h Fri Jul 13 11:26:14 2007
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformationCharPublic( char* p1, const char* customerID);
+ virtual const char* getCustomerInfoACharPublic( char* p1, const char* );
+ virtual const char* getCustomerInfoBCharPublic( char* p1, char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp Fri Jul 13 11:26:14 2007
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target) : tuscany::sca::cpp::CPPServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(tuscany::sca::Operation& operation)
+{
+ const std::string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformationCharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+
+ if(operation.getReturnValue() != NULL)
+ {
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformationCharPublic(p0, p1);
+ }
+ else
+ {
+ const char** ret = new const char*;
+ *ret = impl->getCustomerInformationCharPublic(p0, p1);
+ operation.setReturnValue((const const char**)ret);
+ }
+ return;
+ }
+ if (operationName == "getCustomerInfoACharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+
+ if(operation.getReturnValue() != NULL)
+ {
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoACharPublic(p0, p1);
+ }
+ else
+ {
+ const char** ret = new const char*;
+ *ret = impl->getCustomerInfoACharPublic(p0, p1);
+ operation.setReturnValue((const const char**)ret);
+ }
+ return;
+ }
+ if (operationName == "getCustomerInfoBCharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+
+ if(operation.getReturnValue() != NULL)
+ {
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoBCharPublic(p0, p1);
+ }
+ else
+ {
+ const char** ret = new const char*;
+ *ret = impl->getCustomerInfoBCharPublic(p0, p1);
+ operation.setReturnValue((const const char**)ret);
+ }
+ return;
+ }
+
+
+ throw osoa::sca::ServiceRuntimeException("Invalid operation");
+
+}
+
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h Fri Jul 13 11:26:14 2007
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/cpp/CPPServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::cpp::CPPServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/lib/readme.txt
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/lib/readme.txt?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/lib/readme.txt (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/lib/readme.txt Fri Jul 13 11:26:14 2007
@@ -0,0 +1,4 @@
+Place a junit.jar file (not shipped as part of Tuscany)
+in this directory to get the scagen build.xml Ant build
+file to find it and Junit classes (without setting the
+property "junit.jar.folder".
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/lib/readme.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.bat
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.bat?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.bat (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.bat Fri Jul 13 11:26:14 2007
@@ -0,0 +1,19 @@
+@echo off
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+
+@java -jar %~d0%~p0scagen.jar %*
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.bat
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh Fri Jul 13 11:26:14 2007
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# 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.
+
+
+java -jar scagen.jar -dir $2 -output $4
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/scagen.sh
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,96 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+package org.apache.tuscany.sca.cpp.tools.common;
+
+/**
+ * A snippet of C or C++ source code. If this snippet ends with a return
+ * statement, this body part also contains the return value.
+ */
+public class BodyPart {
+ public final static int TRAILING = 0;
+
+ public final static int RETURN = 1;
+
+ public final static int CATCH = 2;
+
+ private String codeFragment;
+
+ private String returnValue = null;
+
+ private Parameter caughtValue = null;
+
+ private int type;
+
+ BodyPart(String cf) {
+ codeFragment = cf;
+ type = TRAILING;
+ }
+
+ BodyPart(String cf, String rv) {
+ codeFragment = cf;
+ if (null != rv && !Utils.isSpace(rv)) {
+ type = RETURN;
+ returnValue = rv;
+ } else
+ type = TRAILING;
+ }
+
+ BodyPart(String cf, Parameter cv) {
+ codeFragment = cf;
+ caughtValue = cv;
+ type = CATCH;
+ }
+
+ public String getCodeFragment() {
+ return codeFragment;
+ }
+
+ public boolean isTrailing() {
+ return TRAILING == type;
+ }
+
+ public boolean isReturn() {
+ return RETURN == type;
+ }
+
+ public boolean isCatch() {
+ return CATCH == type;
+ }
+
+ public String getReturnValue() {
+ if (returnValue != null)
+ return returnValue.trim();
+ else
+ return null;
+ }
+
+ public Parameter getCaughtValue() {
+ return caughtValue;
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,124 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * The superclass of tools that parse C/C++ code. This CParsingTool provides
+ * some useful common methods.
+ */
+public class CParsingTool {
+ protected boolean failed = false;
+
+ protected Headers headers = new Headers();
+
+ protected CParsingTool(String[] args) throws Exception {
+ String text = new String();
+ for (int i = 0; i < args.length; i++)
+ text += args[i] + " ";
+ Utils.outputDebugString(text);
+
+ Options.set(args);
+ String config = (String) Options.getOption("-config");
+ if (null != config)
+ Configuration.initialise(config);
+ }
+
+ /**
+ * Read in any include files before the main processing of the tool is done.
+ * This constructs the Headers.
+ */
+ protected Headers preparseHeaders(String option) throws Exception {
+ Headers headers = new Headers();
+ Object o = Options.getOption(option);
+ if (null != o) {
+ Utils.outputDebugString("Pre-parsing headers...");
+ List includeList;
+ if (o instanceof List)
+ includeList = (List) o;
+ else {
+ includeList = new ArrayList();
+ includeList.add(o);
+ }
+ Iterator it = includeList.iterator();
+ while (it.hasNext()) {
+ File include = new File((String) it.next());
+ if (!include.isDirectory())
+ Utils.rude("Bad include directory " + include);
+
+ DirectoryTree tree = new DirectoryTree(headers, new HashSet(
+ Arrays.asList(new Object[] { "hpp", "h" })));
+ tree.walkTree(include, null, 0);
+ }
+ Utils.outputDebugString("Parsing files...");
+ }
+
+ return headers;
+ }
+
+ /**
+ * Checks the source directory looks good.
+ */
+ protected File checkFile(String option) throws Exception {
+ String name = (String) Options.getOption(option);
+ if (null == name) {
+ printUsage();
+ System.exit(-1);
+ }
+
+ File file = new File(name);
+ if (!file.isFile() && !file.isDirectory())
+ Utils.rude("Bad file or directory " + file);
+ return file;
+ }
+
+ /**
+ * Checks the target directory and creates it if it doesn't already exist.
+ */
+ protected File maybeCreateDirectory(String option) throws Exception {
+ String name = (String) Options.getOption(option);
+ if (null == name) {
+ printUsage();
+ System.exit(-1);
+ }
+
+ File file = new File(name);
+ if (!file.exists() && !file.mkdir())
+ Utils.screenMessage("Failed to create directory " + file);
+ return file;
+ }
+
+ protected void printUsage() {
+ System.out.println("usage: ??");
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,132 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Encapsulates the tool's configuration file
+ */
+public class Configuration {
+ private static Set files = new HashSet();
+
+ private static Set classes = new HashSet();
+
+ private static Set methods = new HashSet();
+
+ private static Set macros = new HashSet();
+
+ private static Set defines = new HashSet();
+
+ private static Set attributes = new HashSet();
+
+ private static Map others = new HashMap();
+
+ /**
+ * No one creates an instance of this class.
+ */
+ private Configuration() {
+ }
+
+ /**
+ * Reads in the configuration file
+ */
+ public static void initialise(String filename) throws Exception {
+ File file = new File(filename);
+ FileReader fr = new FileReader(file);
+ BufferedReader br = new BufferedReader(fr);
+ String line = br.readLine();
+ for (int lineno = 1; null != line; lineno++, line = br.readLine()) {
+ // Ignore lines starting with a # (comments) and blank lines
+ if (line.startsWith("#"))
+ continue;
+ boolean blank = true;
+ for (int i = 0; i < line.length() && blank; i++)
+ if (!Character.isWhitespace(line.charAt(i)))
+ blank = false;
+ if (blank)
+ continue;
+
+ int equals = line.indexOf("=");
+ if (-1 == equals)
+ Utils.rude("Bad line in configuration file " + filename
+ + " lineno " + lineno);
+ String key = line.substring(0, equals).trim();
+ String value = line.substring(equals + 1).trim();
+ if ("excludefile".equals(key)) {
+ files.add(value);
+ } else if ("excludeclass".equals(key)) {
+ classes.add(value);
+ } else if ("excludemethod".equals(key)) {
+ methods.add(value);
+ } else if ("macro".equals(key)) {
+ macros.add(value);
+ } else if ("define".equals(key)) {
+ defines.add(value);
+ } else if ("attribute".equals(key)) {
+ attributes.add(value);
+ } else {
+ others.put(key, value);
+ }
+ }
+ }
+
+ public static boolean fileExcluded(String s) {
+ return files.contains(s);
+ }
+
+ public static boolean classExcluded(String s) {
+ return classes.contains(s);
+ }
+
+ public static boolean methodExcluded(String className, String method) {
+ return methods.contains(className + "::" + method);
+ }
+
+ public static boolean isMacro(String s) {
+ return macros.contains(s);
+ }
+
+ public static boolean isDefine(String s) {
+ return defines.contains(s);
+ }
+
+ public static boolean isAttribute(String s) {
+ return attributes.contains(s);
+ }
+
+ public static String getConfigured(String key) {
+ return (String) others.get(key);
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,105 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+public class DirectoryTree {
+ private FileActor actor;
+
+ private Set extensions;
+
+ public DirectoryTree(FileActor actor, Set extensions) {
+ this.actor = actor;
+ this.extensions = extensions;
+ }
+
+ /**
+ * Starts adding trace into the given file. If the given file is a directory
+ * then this the starting directory and all code beneath and in this
+ * directory will be given trace.
+ *
+ * @param source -
+ * either the starting directory or one file to add trace to.
+ */
+ public void walkTree(File source, File target, int depth) throws Exception {
+ depth++;
+ boolean noTarget = (null == target);
+
+ if (!source.canRead())
+ Utils.rude("Cannot read from source directory " + source);
+ if (!noTarget && !target.canWrite())
+ Utils.rude("Cannot write to target directory " + target);
+
+ if (source.isDirectory()) {
+ File[] filesInDirectory = source.listFiles();
+ for (int i = 0; i < filesInDirectory.length; i++) {
+ File file = filesInDirectory[i];
+ String name = file.getName();
+ int dot = name.lastIndexOf('.');
+ String ext = null;
+ if (-1 != dot)
+ ext = name.substring(dot + 1);
+
+ if (file.isDirectory()) {
+ File newTarget = null;
+ if (!noTarget) {
+ StringTokenizer st = new StringTokenizer(
+ file.getPath(), "\\/");
+ String newdir = null;
+ while (st.hasMoreTokens())
+ newdir = st.nextToken();
+ String targetName = maybeAppendSeparator(target
+ .toString());
+ newTarget = new File(targetName + newdir);
+ if (!newTarget.mkdir())
+ Utils.rude("Failed to create target directory "
+ + newTarget);
+ }
+
+ // recurse
+ walkTree(file, newTarget, depth);
+ } else if (file.isFile()
+ && (extensions == null || (!file.isHidden() && extensions
+ .contains(ext)))) {
+ // this is a file and we need to add trace into it !
+ actor.actOnFile(file, target, depth);
+ }
+ }
+ } else {
+ actor.actOnFile(source, target, depth);
+ }
+ }
+
+ public static String maybeAppendSeparator(String name) {
+ if (!name.endsWith("/") && !name.endsWith("\\"))
+ name += "/";
+ return name;
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,37 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+
+/**
+ * DirectoryTree calls this interface to allow implementations of this interface
+ * to act on a file in the directory tree.
+ */
+public interface FileActor {
+ public void actOnFile(File source, File target, int depth) throws Exception;
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,80 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+package org.apache.tuscany.sca.cpp.tools.common;
+
+/**
+ * A piece of C++ source code
+ */
+public class FilePart {
+ public final static int UNKNOWN = 0;
+
+ public final static int COMMENT = 1;
+
+ public final static int METHOD = 2;
+
+ public final static int FIELD = 3;
+
+ public final static int BEGINSCOPE = 4;
+
+ public final static int ENDSCOPE = 5;
+
+ public final static int DIRECTIVE = 6;
+
+ public final static int WHITESPACE = 7;
+
+ public final static int MACRO = 8;
+
+ public final static int CLASSATTRIBUTE = 9;
+
+ public final static int ENUM = 10;
+
+ public final static int PROTOTYPE = 11;
+
+ public final static int TYPEDEF = 12;
+
+ protected String cppsource;
+
+ protected int type;
+
+ FilePart(String s, int type) {
+ cppsource = s;
+ this.type = type;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ int length() {
+ return cppsource.length();
+ }
+
+ public String toString() {
+ return cppsource;
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,167 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class Headers implements FileActor {
+ private ArrayList instanceMethods = new ArrayList();
+
+ private ArrayList staticMethods = new ArrayList();
+
+ private ArrayList allMethods = new ArrayList();
+
+ private ArrayList classNames = new ArrayList();
+
+ private boolean failed = false;
+
+ public void actOnFile(File header, File ignored, int depth)
+ throws Exception {
+ if (Configuration.fileExcluded(header.getName())) {
+ Utils.outputDebugString("excluding " + header + "...");
+ return;
+ }
+
+ Utils.outputDebugString("pre-parsing " + header + "...");
+ FileReader fr = null;
+ try {
+ fr = new FileReader(header);
+ } catch (FileNotFoundException fnfe) {
+ throw fnfe;
+ }
+ BufferedReader inputFile = new BufferedReader(fr);
+
+ try {
+ InputCppSourceCode code = new InputCppSourceCode(inputFile, header
+ .getName());
+ Iterator it = code.getPartIterator();
+ while (it.hasNext()) {
+ FilePart fp = (FilePart) (it.next());
+ if (fp.getType() != FilePart.PROTOTYPE)
+ continue;
+ PrototypePart pp = (PrototypePart) fp;
+ String className = pp.className();
+ if (null == className)
+ continue;
+ String trimClassName = className;
+ if (className.endsWith("::"))
+ trimClassName = className.substring(0,
+ className.length() - 2);
+ if (!classNames.contains(trimClassName))
+ classNames.add(trimClassName);
+
+ Signature sign = new Signature(fp.toString());
+ sign.setClassName(className);
+ //Tuscany
+ sign.setScope(pp.getSignature().getScope());
+ sign.setNamespace(pp.getSignature().getNamespace());
+
+ // "Clean" the signature by stripping off attributes,
+ // semicolons, etc
+ Signature cleaned = new Signature(sign.toStringWithoutAttrs());
+ //Tuscany - problem
+ cleaned.setClassName(className);
+ cleaned.setScope(pp.getSignature().getScope());
+ cleaned.setNamespace(pp.getSignature().getNamespace());
+ //Tuscany - end of problem
+
+
+ if (-1 == sign.getAttributes().indexOf("static"))
+ instanceMethods.add(cleaned);
+ else
+ staticMethods.add(cleaned);
+ }
+ } catch (ParsingException pe) {
+ failed = true;
+ }
+
+ inputFile.close();
+ allMethods.addAll(staticMethods);
+ allMethods.addAll(instanceMethods);
+ }
+
+ public boolean failed() {
+ return failed;
+ }
+
+ public boolean isInstanceMethod(Signature sign) {
+ Iterator it = instanceMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (s.equals(sign))
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isStaticMethod(Signature sign) {
+ Iterator it = staticMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (s.equals(sign))
+ return true;
+ }
+ return false;
+ }
+
+ public List getMethods(String method) {
+ ArrayList list = new ArrayList();
+ if (null == method)
+ return list;
+
+ Iterator it = allMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (method.equals(s.getMethodName()))
+ list.add(s);
+ }
+ return list;
+ }
+
+ /**
+ * Tuscany change - a method to get all the method signatures at once
+ */
+ public List getAllMethods() {
+ ArrayList list = new ArrayList();
+ Iterator it = allMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ list.add(s);
+ }
+ return list;
+ }
+
+ public boolean isClassName(String text) {
+ return classNames.contains(text);
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,425 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+public class InputCppSourceCode {
+
+ private ArrayList parts = new ArrayList();
+
+ private String name;
+
+ public InputCppSourceCode(BufferedReader br, String name) throws Exception {
+ this.name = name;
+
+ String s = null;
+ StringBuffer buff = new StringBuffer();
+ for (int i = 1;; i++) {
+ try {
+ s = br.readLine();
+ } catch (Exception e) {
+ System.err.println("Ignoring exception thrown parsing file "
+ + name + " line number " + i);
+ e.printStackTrace();
+ break;
+ }
+ if (s == null)
+ break;
+ buff.append(s + "\n");
+ }
+ String str = buff.toString();
+
+ // TODO: When checking for rest.startsWith("struct") should
+ // check the next letter after struct is not alphanumeric otherwise
+ // we'll get false matches on a function called structify() for
+ // instance. Also applies to enum, union, public, typedef, etc
+
+ String rest, text = "";
+ int scopedepth = 0;
+ String scope = "public";
+ String currentClass = null;
+ String currentNamespace = null;
+ for (int idx = 0; idx < str.length(); /* No idx++ */
+ ) {
+ rest = str.substring(idx);
+ if (Character.isWhitespace(rest.charAt(0))) {
+ int ridx = 0;
+ while (ridx < rest.length()
+ && Character.isWhitespace(rest.charAt(ridx)))
+ ridx++;
+ text = rest.substring(0, ridx);
+ FilePart fp = new FilePart(text, FilePart.WHITESPACE);
+ parts.add(fp);
+ idx += ridx;
+
+ } else if (rest.startsWith("/*")) {
+ int ridx = rest.indexOf("*/"); // Don't use Utils here
+ text = str.substring(idx, idx + ridx + 2);
+ FilePart fp = new FilePart(text, FilePart.COMMENT);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("//")) {
+ text = str.substring(idx, idx + rest.indexOf("\n"));
+ FilePart fp = new FilePart(text, FilePart.COMMENT);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("#")) {
+ int ridx = rest.indexOf("\n");
+ char c = rest.charAt(ridx - 1);
+ while (-1 != ridx && '\\' == c) {
+ String rest2 = rest.substring(ridx + 1);
+ ridx += rest2.indexOf("\n") + 1;
+ c = rest.charAt(ridx - 1);
+ }
+ text = str.substring(idx, idx + ridx);
+ FilePart fp = new FilePart(text, FilePart.DIRECTIVE);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("}")) {
+ if (scopedepth <= 0) //Tuscany need to increase scopedepth for
+ // namespaces?
+ Utils.rude("Braces do not match", name, lineNo(str, idx),
+ rest.substring(0, rest.indexOf("\n")));
+ else
+ scopedepth--;
+ // TODO: better checking that this brace really ends the class
+ if (0 == scopedepth)
+ currentClass = null;
+ scope = "public";
+ parts.add(new FilePart("}", FilePart.ENDSCOPE));
+ idx++;
+
+ } else if (rest.startsWith(";")) {
+ parts.add(new FilePart(";", FilePart.FIELD));
+ idx++;
+
+ } else if (!Character.isLetter(rest.charAt(0))
+ && '~' != rest.charAt(0) && '_' != rest.charAt(0)) {
+ Utils.rude("Lines must start with a letter ", name, lineNo(str,
+ idx), rest.substring(0, rest.indexOf("\n")));
+
+ } else if (MacroPart.isAMacro(rest)) {
+ MacroPart mp = MacroPart.create(rest);
+ parts.add(mp);
+ idx += mp.length();
+
+ } else if (beginsScope(rest)) {
+
+ //Tuscany a namespace comes in here
+ scopedepth++;
+ text = rest.substring(0, Utils.indexOf(rest, "{") + 1);
+ FilePart fp = new FilePart(text, FilePart.BEGINSCOPE);
+ parts.add(fp);
+ idx += text.length();
+ if (Utils.startsWith(text, "class")) {
+ // TODO: cope with comments here
+ // TODO: split out classes into a ClassPart
+ StringTokenizer st = new StringTokenizer(text,
+ Utils.whitespace + ":{");
+ st.nextToken(); // step over "class"
+ while (st.hasMoreTokens()) {
+ String word = st.nextToken();
+ if (Configuration.isAttribute(word))
+ continue;
+ currentClass = word;
+ break;
+ }
+ }
+
+ //Tuscany
+ if (Utils.startsWith(text, "namespace")) {
+ // TODO: cope with comments here
+ StringTokenizer st = new StringTokenizer(text,
+ Utils.whitespace + "{");
+ st.nextToken(); // step over "namespace"
+ String word = "";
+ while (st.hasMoreTokens()) {
+ word = st.nextToken();
+ if (word.equals("{")) {
+ break;
+ }
+
+ }
+
+ if(currentNamespace == null)
+ {
+ currentNamespace = word;
+ }
+ else
+ {
+ currentNamespace += "::" + word;
+ }
+ //We have not got to the class yet
+ //so will need ot deal with the namespace
+ //when we do
+ }
+ // Tuscany end
+
+ } else if (isEnumOrUnion(rest)) {
+ int ridx = Utils.findMatching(rest, '{', '}') + 1;
+ String rest2 = rest.substring(ridx);
+ ridx = idx + ridx + Utils.indexOf(rest2, ';') + 1;
+ text = str.substring(idx, ridx);
+ FilePart fp = new FilePart(text, FilePart.ENUM);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (scopedepth > 0
+ && (rest.startsWith("public")
+ || rest.startsWith("protected") || rest
+ .startsWith("private"))) {
+ int colon = rest.indexOf(":");
+ if (-1 == colon)
+ Utils.rude("No colon found after public or private ", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+ scope = str.substring(idx, idx + colon);
+ text = str.substring(idx, idx + colon + 1);
+ FilePart fp = new FilePart(text, FilePart.CLASSATTRIBUTE);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (Utils.startsWith(rest, "typedef")) {
+ int semicolon = Utils.indexOf(rest, ';');
+ int brace = Utils.indexOf(rest, '{');
+
+ if (-1 == semicolon)
+ Utils.rude("No semicolon found after typedef", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+
+ if (-1 == brace || semicolon < brace) {
+ // Simple typedef
+ text = str.substring(idx, idx + semicolon + 1);
+ } else {
+ // Typedef of a struct, etc
+ int endbrace = Utils.findMatching(rest, '{', '}');
+ String rest2 = rest.substring(endbrace);
+ semicolon = Utils.indexOf(rest2, ';');
+ text = str.substring(idx, idx + endbrace + semicolon + 1);
+ }
+ FilePart fp = new FilePart(text, FilePart.TYPEDEF);
+ parts.add(fp);
+ idx += text.length();
+
+ } else {
+ if (isMethod(rest)) {
+
+ int brace = Utils.indexOf(rest, '{');
+ Signature signature = new Signature(str.substring(idx, idx
+ + brace));
+ if (signature.failed())
+ Utils.rude("Signature parsing failed", name, lineNo(
+ str, idx), signature.getOriginal());
+ if (null != currentClass
+ && null == signature.getClassName())
+ signature.setClassName(currentClass);
+ signature.setScope(scope);
+ signature.setNamespace(currentNamespace);
+
+ String body = rest.substring(brace);
+ int endBrace = Utils.findMatching(body, '{', '}');
+ body = body.substring(0, endBrace + 1);
+ int endIdx = idx + signature.originalLength()
+ + body.length();
+ text = str.substring(idx, endIdx);
+ MethodPart mp = new MethodPart(text, signature, body);
+ parts.add(mp);
+ idx += text.length();
+
+ } else if (isField(rest)) {
+ int semicolon = Utils.indexOf(rest, ';');
+ text = str.substring(idx, idx + semicolon + 1);
+ FilePart fp = new FilePart(text, FilePart.FIELD);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (isPrototype(rest)) {
+ int semicolon = Utils.indexOf(rest, ';');
+ text = str.substring(idx, idx + semicolon + 1);
+ PrototypePart pp = new PrototypePart(text, currentClass, currentNamespace);
+ pp.setScope(scope);
+ parts.add(pp);
+ idx += text.length();
+
+ } else {
+ //TODO other file parts here - not sure if there are any
+ // others?
+ Utils.rude("Unrecognised file part", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+ } // end if
+ } // end if
+ } // end for
+ }
+
+ public Iterator getPartIterator() {
+ return parts.iterator();
+ }
+
+ private int lineNo(String s, int idx) {
+ int n = 0;
+ for (int i = 0; i < idx && i < s.length(); i++)
+ if ('\n' == s.charAt(i))
+ n++;
+ return n;
+ }
+
+ /**
+ * Find out whether we are defining a class, struct or extern "C" which may
+ * contain function implementations. These will have braces which begin a
+ * new scope. Ignore function prototypes that return a struct. struct mystr {
+ * int f1; }; struct mystr func(); struct mystr func() { struct mystr a;
+ * return a; }
+ */
+ private static boolean beginsScope(String s) throws ParsingException {
+ if (isMethod(s))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+
+ // Return false for class prototypes, but true for class definitions.
+ if (Utils.startsWith(s, "class")) {
+ if (-1 == brace)
+ return false;
+ if (-1 == semicolon)
+ return true;
+ return brace < semicolon;
+ }
+
+ if (Utils.startsWith(s, "struct")) {
+ if (-1 == brace || -1 == semicolon)
+ return false;
+ return brace < semicolon;
+ }
+
+ //Tuscany handle namespace for prototypes
+ //in a similar way to "class"
+ if (Utils.startsWith(s, "namespace")) {
+ if (-1 == brace || -1 == semicolon)
+ return false;
+ return brace < semicolon;
+ }
+
+ return startsWithExternScope(s);
+ }
+
+ /**
+ * There are 4 types of extern ... extern int field; extern int func();
+ * extern "C" int func() { return 2; } extern "C" { int func() { return 2; } }
+ * This method should return true only for the last of these three examples
+ * since only the last one creates a new scope using braces.
+ */
+ private static boolean startsWithExternScope(String s)
+ throws ParsingException {
+ if (!s.startsWith("extern"))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+ int bracket = Utils.indexOf(s, '(');
+
+ if (-1 == brace)
+ return false;
+ return (-1 == semicolon || brace < semicolon)
+ && (-1 == bracket || brace < bracket);
+ }
+
+ /**
+ * Find out whether we are defining an enum or union which will contain
+ * braces. Ignore function prototypes that return an enum or union. enum
+ * colour { red, blue }; enum colour func(); enum colour func() { return
+ * colour.red; }
+ */
+ private static boolean isEnumOrUnion(String s) throws ParsingException {
+ if ((!Utils.startsWith(s, "enum") && !Utils.startsWith(s, "union"))
+ || isMethod(s))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+ return -1 != brace && (-1 == semicolon || brace < semicolon);
+ }
+
+ /**
+ * Rules to recognise fields and methods...
+ *
+ * Fields must contain a semicolon Methods may or may not contain a
+ * semicolon Prototypes must contain a semicolon Fields may or may not
+ * contain a brace (array initialisers do) Methods must contain a brace
+ * Prototypes must not contain a brace Fields may or may not contain a
+ * bracket (casts do) Methods must contain a bracket Prototypes must contain
+ * a bracket
+ *
+ * It's a method if it contains a bracket and then a brace before the first
+ * semicolon (if there is a semicolon). It's a prototype if it's not a
+ * method and it contains brackets before a semicolon. It's a field if it's
+ * not a method or a prototype and it contains a semicolon. If it's not a
+ * field, a method or a prototype and we haven't recognised it previously
+ * then it's an error.
+ */
+ private static boolean isMethod(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ int brace = Utils.indexOf(s, '{');
+ int bracket = Utils.indexOf(s, '(');
+
+ return (-1 != bracket && -1 != brace && bracket < brace && (-1 == semicolon || brace < semicolon));
+ }
+
+ private static boolean isPrototype(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ int bracket = Utils.indexOf(s, '(');
+ return !isMethod(s) && -1 != semicolon && -1 != bracket
+ && bracket < semicolon;
+ }
+
+ private static boolean isField(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ return !isMethod(s) && !isPrototype(s) && -1 != semicolon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String toString() {
+ StringBuffer text = new StringBuffer();
+ for (int i = 0; i < parts.size(); i++) {
+ text.append(((FilePart) (parts.get(i))).toString());
+ }
+ return text.toString();
+ }
+
+}
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,87 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+/*
+ * A C or C++ macro as it is used in the source code
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+class MacroPart extends FilePart {
+ /**
+ * Factory method to create a MacroPart.
+ *
+ * @param s
+ * unparsed source code which may start with a define or macro.
+ */
+ static MacroPart create(String s) {
+ String orig = getOriginalText(s);
+ if (null == orig)
+ return null;
+ return new MacroPart(orig);
+ }
+
+ MacroPart(String s) {
+ super(s, FilePart.MACRO);
+ }
+
+ /**
+ * @param s
+ * unparsed source code which may start with a define or macro.
+ * @return all of s up to the end of the define or macro.
+ */
+ private static String getOriginalText(String s) {
+ String name = getName(s);
+ int len = name.length();
+ if (null == name)
+ return null;
+ else if (Configuration.isDefine(name)) {
+ return s.substring(0, len);
+ } else if (Configuration.isMacro(name)) {
+ String rest = s.substring(len);
+ len += Utils.findMatching(rest, '(', ')');
+ return s.substring(0, len + 1);
+ } else
+ return null;
+ }
+
+ static boolean isAMacro(String s) {
+ if (s == null || 0 == s.length())
+ return false;
+ String name = getName(s);
+ return Configuration.isMacro(name) || Configuration.isDefine(name);
+ }
+
+ private static String getName(String s) {
+ int i;
+ for (i = 0; i < s.length(); i++)
+ if (!Character.isLetterOrDigit(s.charAt(i)) && '_' != s.charAt(i))
+ break;
+ if (s.length() == i)
+ return null;
+ return s.substring(0, i);
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,133 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+
+/**
+ * A C or C++ method from a piece of source code. The method has a signature and
+ * a body (the bit between the braces).
+ */
+public class MethodPart extends FilePart {
+ private Signature signature;
+
+ private String body;
+
+ MethodPart(String s, Signature signature, String body) {
+ super(s, METHOD);
+ this.signature = signature;
+ this.body = body;
+ }
+
+ public Signature getSignature() {
+ return signature;
+ }
+
+ public String getOriginalSignature() {
+ return signature.getOriginal();
+ }
+
+ /**
+ * Returns the method body as code snippets, each ending with a place where
+ * a trace statement belongs. The end of the first code snippet is where the
+ * entry trace should go. The end of every other snippet is a return from
+ * the method.
+ */
+ public BodyPart[] getBodyParts() throws ParsingException {
+ String b = body; // Don't alter field member
+ if (b.startsWith("{"))
+ b = b.substring(1);
+
+ // Add in trace exit at all the return statements in the method.
+ ArrayList al = new ArrayList();
+ int idxR = Utils.indexOf(b, "return");
+ int idxC = Utils.indexOf(b, "catch");
+ while (-1 != idxR || -1 != idxC) {
+ if (-1 == idxC || (-1 != idxR && idxR < idxC)) {
+ String frag = b.substring(0, idxR);
+ String rest = b.substring(idxR + "return".length());
+
+ int semicolon = Utils.indexOf(rest, ';');
+ if (-1 == semicolon)
+ Utils.rude("Missing semicolon in " + signature);
+ String retVal = rest.substring(0, semicolon);
+ BodyPart bp = new BodyPart(frag, retVal);
+ al.add(bp);
+ b = b.substring(idxR + "return".length() + retVal.length() + 1);
+ } else {
+ String frag = b.substring(0, idxC);
+ String rest = b.substring(idxC);
+
+ int brace = Utils.indexOf(rest, "{");
+ if (-1 == brace)
+ Utils.rude("Missing open brace in " + signature);
+ Signature signature = new Signature(rest.substring(0, brace));
+ frag = frag + rest.substring(0, brace + 1);
+ BodyPart bp = new BodyPart(frag, signature.getParameters()[0]);
+ al.add(bp);
+ b = rest.substring(brace + 1);
+ }
+ idxR = Utils.indexOf(b, "return");
+ idxC = Utils.indexOf(b, "catch");
+ }
+
+ // Add in trace exit before the last } if there are no returns in
+ // the method or there is code after the last return and the method
+ // returns void.
+ // int f1(){try{return f2();}catch(Exception& e){throw;}}
+ // has code after the last return but having a traceexit before the
+ // last brace wouldn't compile since the method returns an int. We
+ // cope with this by only adding in a traceexit before the last brace
+ // if the method returns void. That may mean we add in an unreachable
+ // traceexit which may give a compiler warning, but that should be
+ // benign.
+ //
+ // TODO: Not quite good enough for
+ // void f(int a){if(a){printf("a");}else{printf("!a");return;}}
+ // as a trace exit is needed before the last } in case a>0 but
+ // void f(int a){if(a){printf("a");return;}else{printf("!a");return;}}
+ // would give compiler warnings about unreachable code if a trace
+ // exit is added before the last brace. This could be tricky to fix.
+ if ((0 == al.size() || -1 != Utils.indexOf(b, ';'))
+ && null == signature.getReturnType().getType()) {
+
+ int last = b.lastIndexOf('}');
+ if (-1 == last)
+ Utils.rude("Missing end brace in " + signature);
+ String b2 = b.substring(0, last);
+ al.add(new BodyPart(b2));
+ b = b.substring(last);
+ }
+
+ // The final body part is the last }
+ al.add(new BodyPart(b));
+
+ BodyPart[] bps = new BodyPart[al.size()];
+ System.arraycopy(al.toArray(), 0, bps, 0, al.size());
+ return bps;
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java?view=auto&rev=556089
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java (added)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java Fri Jul 13 11:26:14 2007
@@ -0,0 +1,164 @@
+/**
+ *
+ * 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.
+ */
+
+/* @version $Rev$ $Date$ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Command line options passed to a tool's main program. All command line
+ * options should begin with a dash "-". Some command line options take a value
+ * which is the next parameter after the option. Others do not.
+ */
+public class Options {
+ static HashMap pairs = new HashMap();
+
+ static List values = new ArrayList();
+
+ /**
+ * No one constructs this class.
+ */
+ private Options() {
+ }
+
+ public static void reset() {
+ pairs = new HashMap();
+ values = new ArrayList();
+ }
+
+ /**
+ * Initialises the options based on the args passed to main
+ */
+ public static void set(String args[]) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].startsWith("-")) {
+ if ((i + 1 <= args.length - 1) && // next one is testable
+ !args[i + 1].startsWith("-") // and it starts with a "-"
+ ) {
+ String key = args[i];
+ Object pairValue = pairs.get(key);
+ if (null == pairValue) {
+ pairs.put(args[i], args[i + 1]);
+ } else if (pairValue instanceof String) {
+ List l = new ArrayList();
+ l.add(pairValue);
+ l.add(args[i + 1]);
+ pairs.put(key, l);
+ } else if (pairValue instanceof List) {
+ ((List) pairValue).add(args[i + 1]);
+ }
+ i++; // Step over value for this key
+ } else
+ values.add(args[i]);
+ }
+ }
+ }
+
+ public static Object getOption(String key) {
+ return pairs.get(key);
+ }
+
+ static boolean isOptionSet(String key) {
+ return values.contains(key) || null!=pairs.get(key);
+ }
+
+ /**
+ * This option will cause scagen to print out messages
+ * about the artefacts it is processing
+ * @return
+ */
+ public static boolean verbose() {
+ return isOptionSet("-verbose");
+ }
+
+ /**
+ * This option will cause scagen to print out some
+ * basic internal log type messages
+ * @return
+ */
+ public static boolean debug() {
+ return isOptionSet("-debug");
+ }
+
+ /**
+ * This option will cause scagen to print out some
+ * text that can be used or pasted into a command
+ * file to copy all the relevant artefacts from
+ * where they are found or generated to a specific
+ * deployment location
+ *
+ * @return
+ */
+ public static boolean deploy() {
+ return isOptionSet("-deploy");
+ }
+
+ /**
+ * This option will prevent scagen from actually writing out
+ * the generated files. It is useful if used in conjunction
+ * with the "-deploy" option.
+ * @return
+ */
+ public static boolean noGenerate() {
+ return isOptionSet("-nogenerate");
+ }
+
+ /**
+ * This option is useful only when used in conjunction with
+ * the "-deploy" option. It changes the output to be more like the
+ * source code of a command script to copy the files to a
+ * specific place.
+ * @return
+ */
+ public static boolean outputCommand() {
+ return isOptionSet("-outputCommand");
+ }
+
+ /**
+ * This option is useful only when used in conjunction with
+ * the "-deploy" option. It changes the output to be a simple
+ * list of artefacts. It has no effect if the "-outputCommand"
+ * option is set.
+ *
+ * @return
+ */
+ public static boolean list() {
+ return isOptionSet("-list");
+ }
+
+ /**
+ * This option is maintained for compatibility with the
+ * original package source. It is not used by new scagen code.
+ *
+ * @return
+ */
+ public static boolean quiet() {
+ return isOptionSet("-quiet");
+ }
+}
\ No newline at end of file
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/cpp/sca/runtime/extensions/cpp/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org