package org.geogebra.common.kernel.algos; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.StringTemplate; import org.geogebra.common.kernel.arithmetic.MyList; import org.geogebra.common.kernel.commands.AlgebraProcessor; import org.geogebra.common.kernel.geos.GeoElement; import org.geogebra.common.kernel.geos.GeoList; import org.geogebra.common.main.MyError; import org.geogebra.common.plugin.GeoClass; import org.geogebra.common.plugin.Operation; /** * Helper for Sum[list of lists] */ public class ListFold implements FoldComputer { private MyList sum; private GeoList result; @Override public GeoElement getTemplate(Construction cons, GeoClass listElement) { return result = new GeoList(cons); } @Override public void add(GeoElement geoElement, Operation op) { sum.applyLeft(op, geoElement, StringTemplate.defaultTemplate); } @Override public void setFrom(GeoElement geoElement, Kernel kernel) { sum = ((GeoList) geoElement).getMyList(); } @Override public boolean check(GeoElement geoElement) { return geoElement.isGeoList(); } @Override public void finish() { result.clear(); AlgebraProcessor ap = result.getKernel().getAlgebraProcessor(); boolean oldMode = result.getConstruction().isSuppressLabelsActive(); result.getConstruction().setSuppressLabelCreation(true); for (int i = 0; i < sum.size(); i++) { try { result.add(ap.processValidExpression( sum.getListElement(i).wrap())[0]); } catch (MyError e) { result.setUndefined(); e.printStackTrace(); } catch (Exception e) { result.setUndefined(); e.printStackTrace(); } } result.getConstruction().setSuppressLabelCreation(oldMode); } }