summaryrefslogtreecommitdiffstats
path: root/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
diff options
context:
space:
mode:
Diffstat (limited to 'javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java')
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java401
1 files changed, 0 insertions, 401 deletions
diff --git a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java b/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
deleted file mode 100644
index 8bb4d26432d9..000000000000
--- a/javaunohelper/com/sun/star/lib/uno/helper/UnoUrl.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-package com.sun.star.lib.uno.helper;
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-
-/**
- * Object representation and parsing of Uno Urls,
- * which allow to locate a named Uno object in a
- * different process. A Uno Url consists of the
- * specification of a connection, protocol and
- * rootOid delimited with a ';'.
- * The syntax of a Uno Url is
- *
- * <code>
- * [uno:]connection-type,parameters;protocol-name,parameters;objectname";
- * </code>
- *
- * An example Uno Url will look like this:
- *
- * <code>
- * socket,host=localhost,port=2002;urp;StarOffice.ServiceManager
- * </code>
- *
- * For more information about Uno Url please consult
- * <a href="http://udk.openoffice.org/common/man/spec/uno-url.html">
- * http://udk.openoffice.org/common/man/spec/uno-url.html</a>
- *
- * Usage:
- *
- * <code>
- * UnoUrl url = UnoUrl.parseUnoUrl("socket,host=localhost,port=2002;urp;StarOffice.ServiceManager");
- * </code>
- */
-public class UnoUrl {
-
- private static final String FORMAT_ERROR =
- "syntax: [uno:]connection-type,parameters;protocol-name,parameters;objectname";
-
- private static final String VALUE_CHAR_SET = "!$&'()*+-./:?@_~";
- private static final String OID_CHAR_SET = VALUE_CHAR_SET + ",=";
-
- private final UnoUrlPart connection;
- private final UnoUrlPart protocol;
- private final String rootOid;
-
- private static class UnoUrlPart {
-
- private final String partTypeName;
- private final HashMap<String,String> partParameters;
- private final String uninterpretedParameterString;
-
- public UnoUrlPart(
- String uninterpretedParameterString,
- String partTypeName,
- HashMap<String,String> partParameters) {
- this.uninterpretedParameterString = uninterpretedParameterString;
- this.partTypeName = partTypeName;
- this.partParameters = partParameters;
- }
-
- public String getPartTypeName() {
- return partTypeName;
- }
-
- public HashMap<String,String> getPartParameters() {
- return partParameters;
- }
-
- public String getUninterpretedParameterString() {
- return uninterpretedParameterString;
- }
-
- public String getUninterpretedString() {
- StringBuffer buf = new StringBuffer(partTypeName);
- if (uninterpretedParameterString.length() > 0) {
- buf.append(',');
- buf.append(uninterpretedParameterString);
- }
- return buf.toString();
- }
- }
-
- private UnoUrl(
- UnoUrlPart connectionPart,
- UnoUrlPart protocolPart,
- String rootOid) {
- this.connection = connectionPart;
- this.protocol = protocolPart;
- this.rootOid = rootOid;
- }
-
- /**
- * Returns the name of the connection of this
- * Uno Url. Encoded characters are not allowed.
- *
- * @return The connection name as string.
- */
- public String getConnection() {
- return connection.getPartTypeName();
- }
-
- /**
- * Returns the name of the protocol of this
- * Uno Url. Encoded characters are not allowed.
- *
- * @return The protocol name as string.
- */
- public String getProtocol() {
- return protocol.getPartTypeName();
- }
-
- /**
- * Return the object name. Encoded character are
- * not allowed.
- *
- * @return The object name as String.
- */
- public String getRootOid() {
- return rootOid;
- }
-
- /**
- * Returns the protocol parameters as
- * a Hashmap with key/value pairs. Encoded
- * characters like '%41' are decoded.
- *
- * @return a HashMap with key/value pairs for protocol parameters.
- */
- public HashMap<String,String> getProtocolParameters() {
- return protocol.getPartParameters();
- }
-
- /**
- * Returns the connection parameters as
- * a Hashmap with key/value pairs. Encoded
- * characters like '%41' are decoded.
- *
- * @return a HashMap with key/value pairs for connection parameters.
- */
- public HashMap<String,String> getConnectionParameters() {
- return connection.getPartParameters();
- }
-
- /**
- * Returns the raw specification of the protocol
- * parameters. Encoded characters like '%41' are
- * not decoded.
- *
- * @return The uninterpreted protocol parameters as string.
- */
- public String getProtocolParametersAsString() {
- return protocol.getUninterpretedParameterString();
- }
-
- /**
- * Returns the raw specification of the connection
- * parameters. Encoded characters like '%41' are
- * not decoded.
- *
- * @return The uninterpreted connection parameters as string.
- */
- public String getConnectionParametersAsString() {
- return connection.getUninterpretedParameterString();
- }
-
- /**
- * Returns the raw specification of the protocol
- * name and parameters. Encoded characters like '%41' are
- * not decoded.
- *
- * @return The uninterpreted protocol name and parameters as string.
- */
- public String getProtocolAndParametersAsString() {
- return protocol.getUninterpretedString();
- }
-
- /**
- * Returns the raw specification of the connection
- * name and parameters. Encoded characters like '%41' are
- * not decoded.
- *
- * @return The uninterpreted connection name and parameters as string.
- */
- public String getConnectionAndParametersAsString() {
- return connection.getUninterpretedString();
- }
-
- private static String decodeUTF8(String s)
- throws com.sun.star.lang.IllegalArgumentException {
-
- if (!s.contains("%")) {
- return s;
- }
- try {
- int length = s.length();
- ByteBuffer bb = ByteBuffer.allocate(length);
- for (int i = 0; i < length; i++) {
- int ch = s.charAt(i);
-
- if (ch == '%') {
- if (i+3 > length)
- throw new com.sun.star.lang.IllegalArgumentException(
- "Incomplete trailing escape (%) pattern");
- try {
- ch = Integer.parseInt(s.substring(i+1,i+3),16);
- } catch (NumberFormatException e) {
- throw new com.sun.star.lang.IllegalArgumentException(e);
- }
- if (ch < 0)
- throw new com.sun.star.lang.IllegalArgumentException(
- "Illegal hex characters in escape (%) pattern - negative value");
- i+=2;
- }
-
- bb.put((byte) (ch & 0xFF));
- }
-
- byte[] bytes = new byte[bb.position()];
- System.arraycopy(bb.array(), 0, bytes, 0, bytes.length);
- return new String(bytes, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new com.sun.star.lang.IllegalArgumentException(e,
- "Couldn't convert parameter string to UTF-8 string");
- }
- }
-
- private static HashMap<String,String> buildParamHashMap(String paramString)
- throws com.sun.star.lang.IllegalArgumentException {
- HashMap<String,String> params = new HashMap<String,String>();
-
- int pos = 0;
-
- while (true) {
- char c = ',';
-
- StringBuffer sb = new StringBuffer();
- while ((pos < paramString.length())
- && ((c = paramString.charAt(pos++)) != '=')) {
- sb.append(c);
- }
- String aKey = sb.toString();
-
- sb = new StringBuffer();
- while ((pos < paramString.length())
- && ((c = paramString.charAt(pos++)) != ',')
- && c != ';') {
- sb.append(c);
- }
- String aValue = sb.toString();
-
- if ((aKey.length() > 0) && (aValue.length() > 0)) {
-
- if (!isAlphaNumeric(aKey)) {
- throw new com.sun.star.lang.IllegalArgumentException(
- "The parameter key '"
- + aKey
- + "' may only consist of alpha numeric ASCII characters.");
- }
-
- if (!isValidString(aValue, VALUE_CHAR_SET + "%")) {
- throw new com.sun.star.lang.IllegalArgumentException(
- "The parameter value for key '" + aKey + "' contains illegal characters.");
- }
-
- params.put(aKey, decodeUTF8(aValue));
- }
-
- if ((pos >= paramString.length()) || (c != ','))
- break;
-
- }
-
- return params;
- }
-
- private static UnoUrlPart parseUnoUrlPart(String thePart)
- throws com.sun.star.lang.IllegalArgumentException {
- String partName;
- String theParamPart;
- int index = thePart.indexOf(',');
- if (index != -1) {
- partName = thePart.substring(0, index).trim();
- theParamPart = thePart.substring(index + 1).trim();
- } else {
- partName = thePart;
- theParamPart = "";
- }
-
- if (!isAlphaNumeric(partName)) {
- throw new com.sun.star.lang.IllegalArgumentException(
- "The part name '"
- + partName
- + "' may only consist of alpha numeric ASCII characters.");
- }
-
- HashMap<String,String> params = buildParamHashMap(theParamPart);
-
- return new UnoUrlPart(theParamPart, partName, params);
- }
-
- private static boolean isAlphaNumeric(String s) {
- return isValidString(s, null);
- }
-
- private static boolean isValidString(String identifier, String validCharSet) {
-
- int len = identifier.length();
-
- for (int i = 0; i < len; i++) {
-
- int ch = identifier.charAt(i);
-
- boolean isValidChar =
- ('A' <= ch && ch <= 'Z')
- || ('a' <= ch && ch <= 'z')
- || ('0' <= ch && ch <= '9');
-
- if (!isValidChar && (validCharSet != null)) {
- isValidChar = (validCharSet.indexOf(ch) != -1);
- }
-
- if (!isValidChar)
- return false;
- }
-
- return true;
- }
-
- /**
- * Parses the given Uno Url and returns
- * an in memory object representation.
- *
- * @param unoUrl The given uno URl as string.
- * @return Object representation of class UnoUrl.
- * @throws IllegalArgumentException if Url cannot be parsed.
- */
- public static UnoUrl parseUnoUrl(String unoUrl)
- throws com.sun.star.lang.IllegalArgumentException {
-
- String url = unoUrl;
-
- int index = url.indexOf(':');
- if (index != -1) {
- String unoStr = url.substring(0, index).trim();
- if (!"uno".equals(unoStr)) {
- throw new com.sun.star.lang.IllegalArgumentException(
- "Uno Urls must start with 'uno:'. " + FORMAT_ERROR);
- }
- }
-
- url = url.substring(index + 1).trim();
-
- index = url.indexOf(';');
- if (index == -1) {
- throw new com.sun.star.lang.IllegalArgumentException("'"+unoUrl+"' is an invalid Uno Url. " + FORMAT_ERROR);
- }
-
- String connection = url.substring(0, index).trim();
- url = url.substring(index + 1).trim();
-
- UnoUrlPart connectionPart = parseUnoUrlPart(connection);
-
- index = url.indexOf(';');
- if (index == -1) {
- throw new com.sun.star.lang.IllegalArgumentException("'"+unoUrl+"' is an invalid Uno Url. " + FORMAT_ERROR);
- }
-
- String protocol = url.substring(0, index).trim();
- url = url.substring(index + 1).trim();
-
- UnoUrlPart protocolPart = parseUnoUrlPart(protocol);
-
- String rootOid = url.trim();
- if (!isValidString(rootOid, OID_CHAR_SET)) {
- throw new com.sun.star.lang.IllegalArgumentException(
- "Root OID '"+ rootOid + "' contains illegal characters.");
- }
-
- return new UnoUrl(connectionPart, protocolPart, rootOid);
-
- }
-
-}