summaryrefslogtreecommitdiffstats
path: root/wizards/com/sun/star/wizards/common/JavaTools.java
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/com/sun/star/wizards/common/JavaTools.java')
-rw-r--r--wizards/com/sun/star/wizards/common/JavaTools.java538
1 files changed, 538 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/common/JavaTools.java b/wizards/com/sun/star/wizards/common/JavaTools.java
new file mode 100644
index 000000000..65bb3f644
--- /dev/null
+++ b/wizards/com/sun/star/wizards/common/JavaTools.java
@@ -0,0 +1,538 @@
+/*
+ * 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.wizards.common;
+
+import com.sun.star.beans.PropertyValue;
+import java.util.*;
+import java.io.File;
+
+import com.sun.star.lib.util.UrlToFileMapper;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class JavaTools
+{
+
+ public static String[] ArrayOutOfMultiDimArray(String _sMultiDimArray[][], int _index)
+ {
+ String[] sRetArray = null;
+ if (_sMultiDimArray != null)
+ {
+ sRetArray = new String[_sMultiDimArray.length];
+ for (int i = 0; i < _sMultiDimArray.length; i++)
+ {
+ sRetArray[i] = _sMultiDimArray[i][_index];
+ }
+ }
+ return sRetArray;
+ }
+
+ /**converts a list of Integer values included in an Integer vector to a list of int values
+ */
+ public static int[] IntegerTointList(java.util.List<Integer> _aIntegerVector)
+ {
+ int[] nintValues = null;
+ if (_aIntegerVector.size() > 0) {
+ int i = 0;
+ nintValues = new int[_aIntegerVector.size()];
+ for (Integer nIntegerValue : _aIntegerVector) {
+ nintValues[i++] = nIntegerValue.intValue();
+ }
+ }
+ return nintValues;
+ }
+
+ /**converts a list of Boolean values included in a Boolean vector to a list of boolean values
+ */
+ public static boolean[] BooleanTobooleanList(java.util.List<Boolean> _aBooleanVector)
+ {
+ boolean[] bbooleanValues = null;
+ if (_aBooleanVector.size() > 0) {
+ int i = 0;
+ bbooleanValues = new boolean[_aBooleanVector.size()];
+ for (Boolean bBooleanValue : _aBooleanVector) {
+ bbooleanValues[i++] = bBooleanValue.booleanValue();
+ }
+ }
+ return bbooleanValues;
+ }
+
+ public static String getlongestArrayItem(String[] StringArray)
+ {
+ String sLongestItem = PropertyNames.EMPTY_STRING;
+ int iCurLength;
+ int iOldLength = 0;
+ for (String str : StringArray)
+ {
+ iCurLength = str.length();
+ if (iCurLength > iOldLength)
+ {
+ iOldLength = iCurLength;
+ sLongestItem = str;
+ }
+ }
+ return sLongestItem;
+ }
+
+ public static String ArraytoString(String[] LocArray)
+ {
+ StringBuilder ResultString = new StringBuilder(PropertyNames.EMPTY_STRING);
+ boolean bActive = false;
+ for (String str : LocArray) {
+ if (bActive) {
+ ResultString.append(PropertyNames.SEMI_COLON);
+ } else {
+ bActive = true;
+ }
+ ResultString.append(str);
+ }
+ return ResultString.toString();
+ }
+
+ /**
+ * @return the index of the field that contains the string 'SearchString' or '-1' if not it is
+ * not contained within the array
+ */
+ public static int FieldInList(String[] SearchList, String SearchString) {
+ int retvalue = -1;
+ for (int i = 0; i < SearchList.length; i++) {
+ if (SearchList[i].equals(SearchString)) {
+ retvalue = i;
+ break;
+ }
+ }
+ return retvalue;
+ }
+
+ public static int FieldInTable(String[][] SearchList, String SearchString)
+ {
+ int retvalue = -1;
+ if (SearchList != null) {
+ int FieldLen = SearchList.length;
+ if (FieldLen > 0) {
+ for (int i = 0; i < FieldLen; i++) {
+ if (SearchList[i][0] != null && SearchList[i][0].equals(SearchString)) {
+ retvalue = i;
+ break;
+ }
+ }
+ }
+ }
+ return retvalue;
+ }
+
+ public static int FieldInIntTable(int[][] SearchList, int SearchValue)
+ {
+ int retvalue = -1;
+ for (int i = 0; i < SearchList.length; i++)
+ {
+ if (SearchList[i][0] == SearchValue)
+ {
+ retvalue = i;
+ break;
+ }
+ }
+ return retvalue;
+ }
+
+ public static int FieldInIntTable(int[] SearchList, int SearchValue, int _startindex)
+ {
+ int retvalue = -1;
+ for (int i = _startindex; i < SearchList.length; i++)
+ {
+ if (SearchList[i] == SearchValue)
+ {
+ retvalue = i;
+ break;
+ }
+ }
+ return retvalue;
+ }
+
+ public static int FieldInIntTable(int[] SearchList, int SearchValue)
+ {
+ return FieldInIntTable(SearchList, SearchValue, 0);
+ }
+
+ public static int getArraylength(Object[] MyArray)
+ {
+ int FieldCount = 0;
+ if (MyArray != null)
+ {
+ FieldCount = MyArray.length;
+ }
+ return FieldCount;
+ }
+
+ /**
+ * This function bubble sorts an array of with 2 dimensions.
+ * The default sorting order is the first dimension
+ * Only if sort2ndValue is True the second dimension is the relevant for the sorting order
+ */
+ public static String[][] bubblesortList(String[][] SortList)
+ {
+ String DisplayDummy;
+ int SortCount = SortList[0].length;
+ int DimCount = SortList.length;
+ for (int s = 0; s < SortCount; s++)
+ {
+ for (int t = 0; t < SortCount - s - 1; t++)
+ {
+ if (SortList[0][t].compareTo(SortList[0][t + 1]) > 0)
+ {
+ for (int k = 0; k < DimCount; k++)
+ {
+ DisplayDummy = SortList[k][t];
+ SortList[k][t] = SortList[k][t + 1];
+ SortList[k][t + 1] = DisplayDummy;
+ }
+ }
+ }
+ }
+ return SortList;
+ }
+
+ public static String[] ArrayoutofString(String MainString, String Token)
+ {
+ String[] StringArray;
+ if (!MainString.equals(PropertyNames.EMPTY_STRING))
+ {
+ ArrayList<String> StringVector = new ArrayList<String>();
+ int iIndex;
+ do
+ {
+ iIndex = MainString.indexOf(Token);
+ if (iIndex < 0)
+ {
+ StringVector.add(MainString);
+ }
+ else
+ {
+ StringVector.add(MainString.substring(0, iIndex));
+ MainString = MainString.substring(iIndex + 1, MainString.length());
+ }
+ }
+ while (iIndex >= 0);
+ int FieldCount = StringVector.size();
+ StringArray = new String[FieldCount];
+ StringVector.toArray(StringArray);
+ }
+ else
+ {
+ StringArray = new String[0];
+ }
+ return StringArray;
+ }
+
+ public static String replaceSubString(String MainString, String NewSubString, String OldSubString)
+ {
+ try
+ {
+ int NewIndex = 0;
+ int OldIndex = 0;
+ int NewSubLen = NewSubString.length();
+ int OldSubLen = OldSubString.length();
+ while (NewIndex != -1)
+ {
+ NewIndex = MainString.indexOf(OldSubString, OldIndex);
+ if (NewIndex != -1)
+ {
+ MainString = MainString.substring(0, NewIndex) + NewSubString + MainString.substring(NewIndex + OldSubLen);
+ OldIndex = NewIndex + NewSubLen;
+ }
+ }
+ return MainString;
+ }
+ catch (Exception exception)
+ {
+ exception.printStackTrace(System.err);
+ return null;
+ }
+ }
+
+ public static String convertfromURLNotation(String _sURLPath)
+ {
+ String sPath = PropertyNames.EMPTY_STRING;
+ try
+ {
+ URL oJavaURL = new URL(_sURLPath);
+ File oFile = UrlToFileMapper.mapUrlToFile(oJavaURL);
+ sPath = oFile.getAbsolutePath();
+ }
+ catch (MalformedURLException e)
+ {
+ e.printStackTrace(System.err);
+ }
+ return sPath;
+ }
+
+ public static String[] removeOutdatedFields(String[] baselist, String[] _complist)
+ {
+ String[] retarray = new String[]
+ {
+ };
+ if ((baselist != null) && (_complist != null))
+ {
+ ArrayList<String> retvector = new ArrayList<String>();
+ for (int i = 0; i < baselist.length; i++)
+ {
+ if (FieldInList(_complist, baselist[i]) > -1)
+ {
+ retvector.add(baselist[i]);
+ // here you could call the method of a defined interface to notify the calling method
+ }
+ }
+ retarray = new String[retvector.size()];
+ retvector.toArray(retarray);
+ }
+ return retarray;
+ }
+
+ public static String[][] removeOutdatedFields(String[][] baselist, String[] _complist, int _compindex)
+ {
+ String[][] retarray = new String[][] {};
+ if ((baselist != null) && (_complist != null))
+ {
+ if (baselist.length > 0)
+ {
+ ArrayList<String[]> retvector = new ArrayList<String[]>();
+ for (int i = 0; i < baselist.length; i++)
+ {
+ String sValue = baselist[i][_compindex];
+ if (FieldInList(_complist, sValue) != -1)
+ {
+ retvector.add(baselist[i]);
+ // here you could call the method of a defined interface to notify the calling method
+ }
+ }
+ retarray = new String[retvector.size()][2];
+ retvector.toArray(retarray);
+ }
+ }
+ return retarray;
+ }
+
+ public static String[][] removeOutdatedFields(String[][] baselist, String[] _complist)
+ {
+ return removeOutdatedFields(baselist, _complist, 0);
+ }
+
+ public static PropertyValue[][] removeOutdatedFields(PropertyValue[][] baselist, String[] _complist)
+ {
+ if ((baselist != null) && (_complist != null))
+ {
+ ArrayList<PropertyValue[]> firstdimvector = new ArrayList<PropertyValue[]>();
+ for (int n = 0; n < baselist.length; n++)
+ {
+ ArrayList<PropertyValue> secdimvector = new ArrayList<PropertyValue>();
+ for (int m = 0; m < baselist[n].length; m++)
+ {
+ if (FieldInList(_complist, baselist[n][m].Name) > -1)
+ {
+ secdimvector.add(baselist[n][m]);
+ }
+ }
+ if (!secdimvector.isEmpty())
+ {
+ PropertyValue[] internalArray = new PropertyValue[secdimvector.size()];
+ secdimvector.toArray(internalArray);
+ firstdimvector.add(internalArray);
+ }
+ }
+ PropertyValue[][] retarray = new PropertyValue[firstdimvector.size()][];
+ return firstdimvector.toArray(retarray);
+ }
+ return new PropertyValue[][]
+ {
+ };
+ }
+
+ /**
+ * searches a multidimensional array for duplicate fields. According to the following example
+ * SlaveFieldName1 ;SlaveFieldName2; SlaveFieldName3
+ * MasterFieldName1;MasterFieldName2;MasterFieldName3
+ * The entries SlaveFieldNameX and MasterFieldNameX are grouped together and then the created groups are compared
+ * If a group is duplicate the entry of the second group is returned.
+ */
+ public static int getDuplicateFieldIndex(String[][] _scomplist)
+ {
+ int retvalue = -1;
+ if (_scomplist.length > 0)
+ {
+ int fieldcount = _scomplist[0].length;
+ String[] sDescList = new String[fieldcount];
+ for (int m = 0; m < fieldcount; m++)
+ {
+ for (int n = 0; n < _scomplist.length; n++)
+ {
+ if (n == 0)
+ {
+ sDescList[m] = "";
+ }
+ sDescList[m] += _scomplist[n][m];
+ }
+ }
+ return getDuplicateFieldIndex(sDescList);
+ }
+ return retvalue;
+ }
+
+ /**
+ * not tested!!!!!
+ */
+ public static int getDuplicateFieldIndex(String[] scomplist)
+ {
+ for (int n = 0; n < scomplist.length; n++)
+ {
+ String scurvalue = scomplist[n];
+ for (int m = n; m < scomplist.length; m++)
+ {
+ if (m != n)
+ {
+ if (scurvalue.equals(scomplist[m]))
+ {
+ return m;
+ }
+ }
+ }
+ }
+ return -1;
+ }
+
+ public static int getDuplicateFieldIndex(String[] _scomplist, String _fieldname)
+ {
+ int iduplicate = 0;
+ for (int n = 0; n < _scomplist.length; n++)
+ {
+ if (_scomplist[n].equals(_fieldname))
+ {
+ iduplicate++;
+ if (iduplicate == 2)
+ {
+ return n;
+ }
+ }
+ }
+ return -1;
+ }
+
+ private static boolean isEqual(PropertyValue firstPropValue, PropertyValue secPropValue)
+ {
+ if (!firstPropValue.Name.equals(secPropValue.Name))
+ {
+ return false;
+ //TODO replace 'equals' with AnyConverter.getType(firstpropValue).equals(secPropValue) to check content and Type
+ }
+ if (!firstPropValue.Value.equals(secPropValue.Value))
+ {
+ return false;
+ }
+ return (firstPropValue.Handle == secPropValue.Handle);
+ }
+
+ public static int[] getDuplicateFieldIndex(PropertyValue[][] ocomplist)
+ {
+ for (int n = 0; n < ocomplist.length; n++)
+ {
+ PropertyValue[] ocurValue = ocomplist[n];
+ for (int m = n; m < ocurValue.length; m++)
+ {
+ PropertyValue odetValue = ocurValue[m];
+ for (int s = 0; s < ocurValue.length; s++)
+ {
+ if (s != m)
+ {
+ if (isEqual(odetValue, ocurValue[s]))
+ {
+ return new int[]
+ {
+ n, s
+ };
+ }
+ }
+ }
+ }
+ }
+ return new int[]
+ {
+ -1, -1
+ };
+ }
+
+ public static String getSuffixNumber(String _sbasestring)
+ {
+ int suffixcharcount = 0;
+ for (int i = _sbasestring.length() - 1; i >= 0; i--)
+ {
+ char b = _sbasestring.charAt(i);
+ if ((b >= '0') && (b <= '9'))
+ {
+ suffixcharcount++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ int istart = _sbasestring.length() - suffixcharcount;
+ return _sbasestring.substring(istart, _sbasestring.length());
+ }
+
+ public static String[] removefromList(String[] _sbaselist, String[] _sdellist) {
+ ArrayList<String> tempbaselist = new ArrayList<String>();
+ for (String _sbase : _sbaselist) {
+ if (FieldInList(_sdellist, _sbase) == -1) {
+ tempbaselist.add(_sbase);
+ }
+ }
+ String[] sretlist = new String[tempbaselist.size()];
+ tempbaselist.toArray(sretlist);
+ return sretlist;
+ }
+
+ /**
+ * compares two strings. If one of them is empty and the other one is null it also returns true
+ */
+ public static boolean isSame(String sFirstString, String sSecondString)
+ {
+ boolean bissame = false;
+ if (sFirstString == null)
+ {
+ if (sSecondString != null)
+ {
+ bissame = sSecondString.equals(PropertyNames.EMPTY_STRING);
+ }
+ else
+ {
+ bissame = true;
+ }
+ }
+ else
+ {
+ if (sFirstString.equals(PropertyNames.EMPTY_STRING))
+ {
+ bissame = (sSecondString == null);
+ }
+ else if (sSecondString != null)
+ {
+ bissame = sFirstString.equals(sSecondString);
+ }
+ }
+ return bissame;
+ }
+}