package treehou.se.habit.ui.widgets; import android.content.Context; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import java.util.HashMap; import java.util.Map; import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage; import se.treehou.ng.ohcommunicator.connector.models.OHServer; import se.treehou.ng.ohcommunicator.connector.models.OHWidget; import se.treehou.ng.ohcommunicator.util.OpenhabConstants; import treehou.se.habit.core.db.model.ServerDB; import treehou.se.habit.ui.widgets.factories.ChartWidgetFactory; import treehou.se.habit.ui.widgets.factories.ColorpickerWidgetFactory; import treehou.se.habit.ui.widgets.factories.FrameWidgetFactory; import treehou.se.habit.ui.widgets.factories.GroupWidgetFactory; import treehou.se.habit.ui.widgets.factories.IWidgetFactory; import treehou.se.habit.ui.widgets.factories.ImageWidgetFactory; import treehou.se.habit.ui.widgets.factories.SelectionWidgetFactory; import treehou.se.habit.ui.widgets.factories.SetpointWidgetFactory; import treehou.se.habit.ui.widgets.factories.SliderWidgetFactory; import treehou.se.habit.ui.widgets.factories.switches.SwitchWidgetFactory; import treehou.se.habit.ui.widgets.factories.TextWidgetFactory; import treehou.se.habit.ui.widgets.factories.VideoWidgetFactory; import treehou.se.habit.ui.widgets.factories.WebWidgetFactory; public class WidgetFactory { private static final String TAG = "WidgetFactory"; private FragmentActivity context; private ServerDB server; private OHLinkedPage page; private LayoutInflater inflater; private IWidgetFactory defaultBuilder = new TextWidgetFactory(); private Map<String, IWidgetFactory> builders = new HashMap<>(); public WidgetFactory(FragmentActivity context, ServerDB server, OHLinkedPage page){ this.context = context; this.server = server; this.page = page; // Populate factory builders.put(OpenhabConstants.TYPE_FRAME, new FrameWidgetFactory()); builders.put(OpenhabConstants.TYPE_CHART, new ChartWidgetFactory()); builders.put(OpenhabConstants.TYPE_COLORPICKER, new ColorpickerWidgetFactory()); builders.put(OpenhabConstants.TYPE_IMAGE, new ImageWidgetFactory()); builders.put(OpenhabConstants.TYPE_VIDEO, new VideoWidgetFactory()); builders.put(OpenhabConstants.TYPE_WEB, new WebWidgetFactory()); builders.put(OpenhabConstants.TYPE_SLIDER, new SliderWidgetFactory()); builders.put(OpenhabConstants.TYPE_SWITCH, new SwitchWidgetFactory()); builders.put(OpenhabConstants.TYPE_SELECTION, new SelectionWidgetFactory()); builders.put(OpenhabConstants.TYPE_SETPOINT, new SetpointWidgetFactory()); builders.put(OpenhabConstants.TYPE_TEXT, new TextWidgetFactory()); builders.put(OpenhabConstants.TYPE_GROUP, new GroupWidgetFactory()); } public IWidgetHolder createWidget(final OHWidget widget , final OHWidget parent){ inflater = LayoutInflater.from(context); IWidgetHolder itemHolder; try { if (builders.containsKey(widget.getType())) { Log.w(TAG, "Building widget with type " + widget.getType()); IWidgetFactory builder = builders.get(widget.getType()); itemHolder = builder.build(this, page, widget, parent); } else { Log.w(TAG, "Error: No builder with type " + widget.getType()); return defaultBuilder.build(this, page, widget, parent); } }catch (Exception e){ e.printStackTrace(); itemHolder = defaultBuilder.build(this, page, widget, parent); } return itemHolder; } public Context getContext() { return context; } public LayoutInflater getInflater() { return inflater; } public OHServer getServer() { return server.toGeneric(); } public ServerDB getServerDB() { return server; } public interface IWidgetHolder { View getView(); void update(OHWidget widget); } public static class WidgetHolder implements IWidgetHolder { private View view; public WidgetHolder(View view) { this.view = view; } public View getView() { return view; } public void update(OHWidget widget) {} } public OHLinkedPage getPage() { return page; } }