package org.intermine.app.view; /* * Copyright (C) 2015 InterMine * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. See the LICENSE file for more * information or http://www.gnu.org/copyleft/lesser.html. * */ import android.content.Context; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import org.intermine.app.R; import org.intermine.app.adapter.MultiValueListAdapter; import org.intermine.app.adapter.SimpleAdapter; import org.intermine.app.core.templates.constraint.ConstraintOperation; import org.intermine.app.core.templates.constraint.PathConstraint; import org.intermine.app.core.templates.constraint.PathConstraintMultiValue; import org.intermine.app.core.templates.constraint.PathConstraintSimpleMultiValue; import java.util.Arrays; import java.util.Collection; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; /** * @author Daria Komkova <Daria_Komkova @ hotmail.com> */ public class MultiValueConstraintView extends ConstraintView { @InjectView(R.id.operations_spinner) protected Spinner mOperationsSpinner; @InjectView(R.id.constraint_path) protected TextView mPath; @InjectView(R.id.values) protected RecyclerView mValues; private MultiValueListAdapter mAdapter; private PathConstraintSimpleMultiValue mConstraint; public MultiValueConstraintView(Context context, PathConstraintSimpleMultiValue constraint) { super(context, constraint); mConstraint = constraint; init(); } public MultiValueConstraintView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MultiValueConstraintView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } @Override public boolean isValidConstraint() { return !mAdapter.getSelected().isEmpty(); } @Override public void highlightInvalid() { Toast.makeText(getContext(), "Please, select at least one value from the list!", Toast.LENGTH_SHORT).show(); } private void init() { inflate(getContext(), R.layout.multivalue_constraint_view, this); ButterKnife.inject(this); SimpleAdapter<ConstraintOperation> adapter = new SimpleAdapter(getContext()); List<ConstraintOperation> data = Arrays.asList(ConstraintOperation.ONE_OF, ConstraintOperation.NONE_OF); adapter.updateData(data); mOperationsSpinner.setAdapter(adapter); LinearLayoutManager manager = new LinearLayoutManager(getContext()); manager.setOrientation(LinearLayoutManager.VERTICAL); mValues.setLayoutManager(manager); mAdapter = new MultiValueListAdapter(mConstraint.getValues()); mValues.setAdapter(mAdapter); mValues.setItemAnimator(new DefaultItemAnimator()); if (null != mConstraint) { mPath.setText(mConstraint.getPath()); for (int i = 0; i < data.size(); i++) { if (data.get(i).equals(mConstraint.getOperation())) { mOperationsSpinner.setSelection(i); } } } } public Collection<String> getValues() { return mAdapter.getSelected(); } public ConstraintOperation getOperation() { return (ConstraintOperation) mOperationsSpinner.getSelectedItem(); } @Override public PathConstraint getGeneratedConstraint() { PathConstraint constraint = getPathConstraint(); return new PathConstraintMultiValue(constraint.getPath(), getOperation(), getValues(), constraint.getCode()); } }