blob: 9302f2ef4a10984062f03851007385c61c85230c [file] [log] [blame]
/**************************************************************
*
* 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.
*
*************************************************************/
package com.sun.star.report.pentaho;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lib.uno.helper.WeakBase;
import com.sun.star.sheet.FormulaLanguage;
import com.sun.star.sheet.FormulaMapGroup;
import com.sun.star.sheet.FormulaOpCodeMapEntry;
import com.sun.star.sheet.FormulaToken;
import java.util.ArrayList;
import java.util.Map;
public final class SOFormulaOpCodeMapper extends WeakBase
implements com.sun.star.sheet.XFormulaOpCodeMapper, XServiceInfo
{
private static final String __serviceName = "com.sun.star.report.pentaho.SOFormulaOpCodeMapper";
private final SOFormulaParser parser;
// attributes
final private int m_OpCodeExternal = 0;
final private int m_OpCodeUnknown = 0;
public SOFormulaOpCodeMapper(SOFormulaParser parser)
{
this.parser = parser;
}
// com.sun.star.sheet.XFormulaOpCodeMapper:
public int getOpCodeExternal()
{
return m_OpCodeExternal;
}
public int getOpCodeUnknown()
{
return m_OpCodeUnknown;
}
public com.sun.star.sheet.FormulaToken[] getMappings(String[] Names, int Language) throws com.sun.star.lang.IllegalArgumentException
{
if (Language != FormulaLanguage.ODFF)
{
throw new IllegalArgumentException();
}
final ArrayList token = new ArrayList();
final Map parserNames = parser.getNames();
for (int i = 0; i < Names.length; i++)
{
if (parserNames.containsKey(Names[i]))
{
token.add(((FormulaOpCodeMapEntry) parserNames.get(Names[i])).Token);
}
}
return (com.sun.star.sheet.FormulaToken[]) token.toArray(new FormulaToken[token.size()]);
}
public com.sun.star.sheet.FormulaOpCodeMapEntry[] getAvailableMappings(int Language, int Groups) throws com.sun.star.lang.IllegalArgumentException
{
if (Language != FormulaLanguage.ODFF)
{
throw new IllegalArgumentException();
}
final ArrayList token = new ArrayList();
if (Groups == FormulaMapGroup.SPECIAL)
{
return (com.sun.star.sheet.FormulaOpCodeMapEntry[]) parser.getSpecialOpCodes().toArray(new FormulaOpCodeMapEntry[parser.getSpecialOpCodes().size()]);
}
else
{
if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values());
}
if ((Groups & FormulaMapGroup.SEPARATORS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.SEPARATORS).values());
}
if ((Groups & FormulaMapGroup.ARRAY_SEPARATORS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.ARRAY_SEPARATORS).values());
}
if ((Groups & FormulaMapGroup.UNARY_OPERATORS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.UNARY_OPERATORS).values());
}
if ((Groups & FormulaMapGroup.BINARY_OPERATORS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.BINARY_OPERATORS).values());
}
if ((Groups & FormulaMapGroup.FUNCTIONS) != 0)
{
token.addAll(parser.getGroup(SOFormulaParser.FUNCTIONS).values());
}
}
return (com.sun.star.sheet.FormulaOpCodeMapEntry[]) token.toArray(new FormulaOpCodeMapEntry[token.size()]);
}
public String getImplementationName()
{
return SOFormulaOpCodeMapper.class.getName();
}
public boolean supportsService(String sServiceName)
{
return sServiceName.equals(__serviceName);
}
public String[] getSupportedServiceNames()
{
return getServiceNames();
}
/**
* This method is a simple helper function to used in the static component initialisation functions as well as
* in getSupportedServiceNames.
* @return
*/
public static String[] getServiceNames()
{
return new String[]
{
__serviceName
};
}
}