package org.openhab.habclient.rule;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import org.openhab.domain.IOpenHABWidgetProvider;
import org.openhab.domain.IUnitEntityDataTypeProvider;
import org.openhab.domain.model.OpenHABWidget;
import org.openhab.domain.rule.IEntityDataType;
import org.openhab.domain.rule.IRuleOperatorProvider;
import org.openhab.domain.rule.RuleOperation;
import org.openhab.domain.rule.RuleOperatorType;
import org.openhab.domain.rule.UnitEntityDataType;
import org.openhab.habdroid.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
/**
* Created by Tony Alpskog in 2014.
*/
public class AdapterProvider implements IAdapterProvider {
private final IRuleOperatorProvider mRuleOperatorProvider;
private final IOpenHABWidgetProvider mOpenHABWidgetProvider;
private final IUnitEntityDataTypeProvider mUnitEntityDataTypeProvider;
@Inject
public AdapterProvider(IRuleOperatorProvider ruleOperatorProvider,
IOpenHABWidgetProvider openHABWidgetProvider,
IUnitEntityDataTypeProvider unitEntityDataTypeProvider) {
mRuleOperatorProvider = ruleOperatorProvider;
mOpenHABWidgetProvider = openHABWidgetProvider;
mUnitEntityDataTypeProvider = unitEntityDataTypeProvider;
}
@Override
public List<String> getRuleOperatorList(Context context, IEntityDataType<?> operand, boolean includeNonSelectionValue) {
Set<RuleOperatorType> ruleOperatorTypes = mRuleOperatorProvider.getRuleOperatorTypes(operand.getDataType());
List<String> adapterList = new ArrayList<String>();
if(includeNonSelectionValue) adapterList.add(context.getString(R.string.no_value));
for(RuleOperatorType operatorType : ruleOperatorTypes)
adapterList.add(operatorType.getName());
return adapterList;
}
@Override
public BaseAdapter getStaticUnitValueAdapter(Context context, String openHABItemName) {
OpenHABWidget openHABWidget = mOpenHABWidgetProvider.getWidgetByItemName(openHABItemName);
return getStaticUnitValueAdapter(context, openHABWidget);
}
@Override
public BaseAdapter getStaticUnitValueAdapter(Context context, OpenHABWidget openHABWidget) {
UnitEntityDataType<?> unitEntityDataType = mUnitEntityDataTypeProvider.getUnitEntityDataType(openHABWidget);
Map<String, ?> staticValueHash = unitEntityDataType.getStaticValues();
if(staticValueHash == null)
return null;
List<String> toList = new ArrayList<String>();
toList.add(context.getString(R.string.no_value));
toList.addAll(staticValueHash.keySet());
return new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, toList);
}
@Override
public BaseAdapter getStaticOperationValueAdapter(Context context, boolean includeNonSelectionValue) {
RuleOperation staticOperation = RuleOperation.getStaticEntityDataType(null);
Map<String, ?> staticValueHash = staticOperation.getStaticValues();
if(staticValueHash == null)
return null;
List<String> toList = new ArrayList<String>();
if(includeNonSelectionValue)
toList.add(context.getString(R.string.no_value));
toList.addAll(staticValueHash.keySet());
return new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, toList);
}
}