/** * */ package org.geogebra.common.util; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.kernel.geos.GeoBoolean; import org.geogebra.common.kernel.geos.GeoElement; /** * @author Christoph */ public class BoolAssignment extends Assignment { private GeoBoolean geoBoolean; private String geoBooleanLabel; private String geoBooleanOldLabel; /** * Create a BoolAssignment * * @param geoBoolean * a GeoBoolean if true should give a correct assignment false a * WRONG assignment. Meaning can be reversed by setting negative * fractions for WRONG and vice versa. * @param kernel * Kernel */ public BoolAssignment(GeoBoolean geoBoolean, Kernel kernel) { this(geoBoolean.getLabelSimple(), kernel); this.geoBooleanOldLabel = geoBoolean.getOldLabel(); this.geoBoolean = geoBoolean; } /** * Constructor to be used during file loading when the GeoBoolean to check * for is not existing. * * @param label * Label of the GeoBoolean to use for checking * @param kernel * Kernel */ public BoolAssignment(String label, Kernel kernel) { super(kernel); geoBooleanLabel = label; } @Override public Result checkAssignment() { if (!isValid()) { res = Result.UNKNOWN; } else { res = getGeoBoolean().getBoolean() ? Result.CORRECT : Result.WRONG; } return res; } @Override public Result[] possibleResults() { Result[] results = { Result.CORRECT, Result.WRONG, Result.UNKNOWN }; return results; } @Override public String getIconFileName() { return getClass().getSimpleName(); } @Override public String getDisplayName() { return getGeoBoolean() != null ? getGeoBoolean().getNameDescription() : ""; } @Override public boolean isValid() { return kernel.getConstruction().getGeoSetNameDescriptionOrder() .contains(getGeoBoolean()); } /** * Test if a GeoBoolean is used by this assignment * * @param geo * GeoBoolean to check for * @return true if geo is used by this assignment */ public boolean usesGeoBoolean(GeoBoolean geo) { return getGeoBoolean() != null && getGeoBoolean().equals(geo); } /** * @return the {@link GeoBoolean} used to check correctness */ public GeoBoolean getGeoBoolean() { if (geoBoolean == null) { GeoElement geoElem = kernel.lookupLabel(geoBooleanLabel); if (geoElem instanceof GeoBoolean) { geoBoolean = (GeoBoolean) geoElem; } } else { update(); } return geoBoolean; } @Override public String getAssignmentXML() { if (getGeoBoolean() == null) { return ""; } StringBuilder sb = new StringBuilder(); sb.append("\t<assignment booleanName=\""); StringUtil.encodeXML(sb, getGeoBoolean().getLabelSimple()); sb.append("\">\n"); getAssignmentXML(sb); return sb.toString(); } /** * @return update reference to Boolean geo */ public boolean update() { String initLabel = geoBoolean == null ? geoBooleanLabel : geoBoolean.getLabelSimple(); GeoElement geo = kernel.lookupLabel(initLabel); if (geo == null) { geo = kernel.lookupLabel(geoBoolean.getOldLabel()); if (geo == null) { geo = kernel.lookupLabel(geoBooleanOldLabel); } } boolean ret = false; if (geo instanceof GeoBoolean) { geoBoolean = (GeoBoolean) geo; if (!geoBooleanLabel.equals(geoBoolean.getLabelSimple())) { geoBooleanOldLabel = geoBooleanLabel; geoBooleanLabel = geoBoolean.getLabelSimple(); } ret = true; } else { ret = false; } return ret; } }