summaryrefslogtreecommitdiff
path: root/scripting/source/storage/ScriptURI.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/source/storage/ScriptURI.cxx')
-rw-r--r--scripting/source/storage/ScriptURI.cxx227
1 files changed, 227 insertions, 0 deletions
diff --git a/scripting/source/storage/ScriptURI.cxx b/scripting/source/storage/ScriptURI.cxx
new file mode 100644
index 000000000000..0b9159ec03af
--- /dev/null
+++ b/scripting/source/storage/ScriptURI.cxx
@@ -0,0 +1,227 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_scripting.hxx"
+#include <osl/diagnose.h>
+#include <osl/file.h>
+
+#ifdef _DEBUG
+#include <stdio.h>
+#endif
+
+//Local headers
+#include "ScriptURI.hxx"
+#include <util/util.hxx>
+
+using namespace ::rtl;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+
+
+namespace scripting_impl {
+
+static const OUString schema = OUString::createFromAscii( "vnd.sun.star.script://" );
+
+/**
+ * Constructor
+ *
+ * @param scriptURI the string script URI
+ */
+ScriptURI::ScriptURI( const ::rtl::OUString& scriptURI )
+ throw ( IllegalArgumentException ) : m_uri( scriptURI )
+{
+ OSL_TRACE( "received uri: %s\n",::rtl::OUStringToOString( m_uri, RTL_TEXTENCODING_ASCII_US).pData->buffer );
+ set_values( parseIt() );
+ if( !isValid() )
+ {
+ OSL_TRACE( "ScriptURI ctor: throwing IllegalArgException" );
+ throw IllegalArgumentException(
+ OUSTR( "Failed to parse invalid URI: " ).concat( scriptURI ),
+ Reference < XInterface > (), 1 );
+ }
+}
+
+/**
+ * Destuctor
+ *
+ */
+// dtor should never throw exceptions, so ensure this by specifying it
+ScriptURI::~ScriptURI() SAL_THROW( () )
+{
+ OSL_TRACE( "< ScriptURI dtor called >\n" );
+}
+
+/**
+ * This function is used to determine if this object represents a valid URI
+ *
+ */
+bool ScriptURI::isValid( ) {
+ return ( m_valid == sal_True );
+}
+
+/**
+ * This function returns the location of the script
+ *
+ */
+::rtl::OUString ScriptURI::getLocation( )
+{
+ return m_location;
+}
+
+/**
+ * This function returns the language of the script, eg. java, StarBasic,...
+ *
+ */
+::rtl::OUString ScriptURI::getLanguage( )
+{
+ return m_language;
+}
+
+/**
+ * This function returns the language dependent function name of the script
+ *
+ */
+::rtl::OUString ScriptURI::getFunctionName( )
+{
+ return m_functionName;
+}
+
+/**
+ * This function returns the language independent logical name of the script
+ *
+ */
+::rtl::OUString ScriptURI::getLogicalName( )
+{
+ return m_logicalName;
+}
+
+/**
+ * This function returns the full URI
+ *
+ */
+::rtl::OUString ScriptURI::getURI( )
+{
+ return m_uri;
+}
+
+//Private mutex guarded method for setting the members
+void ScriptURI::set_values( scripting_impl::Uri values )
+{
+ osl::Guard< ::osl::Mutex > aGuard( m_mutex );
+ m_valid = values.valid;
+ m_location = values.location;
+ m_language = values.language;
+// format is vnd.sun.star.script://[function_name]?language=[languge]&location=[location]
+// LogicalName is now not used anymore, further more the ScriptURI class
+// will be retired also and a new UNO service will be used. Additionally the
+// parcel-description will also need to be modified to remove logical name
+// In order to temporarly support the existing code functionname is
+// set to the logica name parsed by this class. So getLogicalName() and
+// getFunctionName() return identical string.
+//
+
+ m_functionName = values.logicalName;
+ m_logicalName = values.logicalName;
+
+}
+/**
+ * This is a private method used for parsing the URI received by the
+ * initialization.
+ *
+ */
+// rather naive parsing?
+Uri ScriptURI::parseIt()
+{
+ sal_Int32 schemaLen = schema.getLength();
+ scripting_impl::Uri results;
+ results.valid = sal_True;
+ //attempt to parse
+ // check that it starts vnd.sun.star.script
+ // better check for OBO errors here
+ if( m_uri.indexOf( schema ) != 0 )
+ {
+ OSL_TRACE( "wrong schema" );
+ results.valid=sal_False;
+ return results;
+ }
+
+ // substr from here to the '?' and set the logical name
+ sal_Int32 len = m_uri.indexOf( '?' );
+ if( len == -1 )
+ {
+ // no queries so just set the logical name
+ results.logicalName = m_uri.copy( schemaLen );
+ return results;
+ }
+ results.logicalName = m_uri.copy( schemaLen, len-schemaLen );
+ OSL_TRACE( "log name: %s\n", ::rtl::OUStringToOString( results.logicalName,
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+
+ len++;
+ // now get the attributes
+ OUString attr;
+ do
+ {
+ attr = m_uri.getToken( 0, '&', len );
+ OSL_TRACE( "chunk: %s\n", ::rtl::OUStringToOString( attr,
+ RTL_TEXTENCODING_ASCII_US ).pData->buffer );
+
+ if( attr.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "language" ) )
+ == sal_True )
+ {
+ sal_Int32 len2 = attr.indexOf('=');
+ results.language = attr.copy( len2 + 1 );
+ continue;
+ }
+ else if ( attr.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "location" ) )
+ == sal_True )
+ {
+ sal_Int32 len2 = attr.indexOf( '=' );
+ results.location = attr.copy( len2 + 1 );
+ continue;
+ }
+ else if ( attr.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "function" ) )
+ == sal_True )
+ {
+ sal_Int32 len2 = attr.indexOf( '=' );
+ results.functionName = attr.copy( len2 + 1 );
+ continue;
+ }
+ else
+ {
+ OSL_TRACE( "Unknown attribute?\n" );
+ }
+ }
+ while ( len >= 0 );
+
+ // parse is good
+ return results;
+}
+
+} // namespace script_uri