1 /*******************************************************************************
\r
2 * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.
\r
3 * All rights reserved. This program and the accompanying materials
\r
4 * are made available under the terms of the Eclipse Public License v1.0
\r
5 * which accompanies this distribution, and is available at
\r
6 * http://www.eclipse.org/legal/epl-v10.html
\r
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.databoard.util;
\r
13 import java.io.IOException;
\r
14 import java.io.UnsupportedEncodingException;
\r
15 import java.util.regex.Matcher;
\r
16 import java.util.regex.Pattern;
\r
17 import java.util.regex.PatternSyntaxException;
\r
19 import org.simantics.databoard.Bindings;
\r
20 import org.simantics.databoard.Datatypes;
\r
21 import org.simantics.databoard.binding.Binding;
\r
22 import org.simantics.databoard.binding.NumberBinding;
\r
23 import org.simantics.databoard.binding.StringBinding;
\r
24 import org.simantics.databoard.binding.error.BindingException;
\r
25 import org.simantics.databoard.binding.error.RuntimeBindingException;
\r
26 import org.simantics.databoard.binding.mutable.Variant;
\r
27 import org.simantics.databoard.file.RuntimeIOException;
\r
28 import org.simantics.databoard.serialization.Serializer;
\r
29 import org.simantics.databoard.serialization.SerializerConstructionException;
\r
31 public class StringUtil {
\r
34 * Convert variant to string
\r
37 * @return string representation
\r
39 public static String variantToString(Variant v) {
\r
41 return (String) Bindings.STR_VARIANT.create(v.getBinding(), v.getValue());
\r
42 } catch (BindingException e) {
\r
43 throw new RuntimeBindingException(e);
\r
48 * Convert variant's string representation to variant
\r
52 * @throws BindingException
\r
54 public static Variant stringToVariant(String str) throws BindingException {
\r
55 return (Variant) Bindings.VARIANT.create(Bindings.STR_VARIANT, str);
\r
59 * Convert variant to nice user readable string.
\r
60 * The string is not convertible back to variant without type information.
\r
63 * @return string representation of the variant
\r
65 public static String variantToUserReadableString(Variant v) {
\r
67 Binding binding = v.getBinding();
\r
68 Object value = v.getValue();
\r
69 if ( binding == Bindings.STRING ) return (String) value;
\r
70 if ( binding.type().equals(Datatypes.STRING)) {
\r
71 StringBinding sb = (StringBinding) binding;
\r
72 return sb.getValue(value);
\r
75 if (binding instanceof NumberBinding) {
\r
76 return binding.toString(value);
\r
79 Serializer s = Bindings.getSerializer( Bindings.VARIANT );
\r
80 byte[] bytes = s.serialize( v );
\r
81 return Base64.encodeBytes(bytes, Base64.URL_SAFE);
\r
82 } catch (BindingException e) {
\r
84 throw new RuntimeBindingException(e);
\r
85 } catch (SerializerConstructionException e) {
\r
86 throw new RuntimeException(e);
\r
87 } catch (IOException e) {
\r
88 throw new RuntimeIOException(e);
\r
93 * Create escaped filename from a string
\r
95 * @param name any string
\r
96 * @return file compatible string
\r
98 public static String escapeToFileName(String name) {
\r
100 return java.net.URLEncoder.encode(name, "UTF-8");
\r
101 } catch (UnsupportedEncodingException e) {
\r
103 throw new RuntimeException(e);
\r
108 * Unescape filename into string
\r
111 * @return any string
\r
113 public static String unescapeFileName(String filename) {
\r
115 return java.net.URLDecoder.decode(filename, "UTF-8");
\r
116 } catch (UnsupportedEncodingException e) {
\r
118 throw new RuntimeException(e);
\r
122 public static boolean simplePatternMatch(String str, String simplePattern)
\r
125 Pattern ptr = compileSimplePattern(simplePattern);
\r
126 Matcher m = ptr.matcher(str);
\r
127 return m.matches();
\r
128 } catch (PatternSyntaxException pse) {
\r
134 * Compiles pattern from simple pattern. Simple pattern is normal
\r
135 * wild card compare that supports * and ? wild cards.
\r
137 * @param patternStr simple pattern
\r
138 * @return Regexp pattern
\r
140 public static Pattern compileSimplePattern(String patternStr)
\r
141 throws PatternSyntaxException
\r
144 for (int i=0; i<patternStr.length(); i++)
\r
146 char c = patternStr.charAt(i);
\r
147 if ( (c>='a'&&c<='z') || (c>='A'&&c<='Z') || (c>='0'&&c<='9'))
\r
153 else str += "\\"+c;
\r
155 return Pattern.compile(str);
\r